【发布时间】:2020-10-05 15:26:19
【问题描述】:
我正在尝试制作一个自定义计数器输入组件,但我正在努力让输入值由自定义递增/递减按钮控制。
这就是我想要做的:
我想使用内容投影并公开输入,以便在表单中使用它并添加属性,就像在常规数字输入上一样。所以关于输入的指令似乎是要走的路:
<my-counter-input>
<input [(ngModel)]="count" myInputRef />
</my-counter-input>
组件本身会有两个按钮和一个ng-content-slot:
<button (click)="decrement()">-</button>
<ng-content select="input"></ng-content>
<button (click)="increment()">+</button>
到目前为止,一切似乎都很好。现在我可以使用 @ContentChild 装饰器与指令进行交互。
@Component({
selector: 'my-counter-input',
templateUrl: './counter-input.component.html',
styleUrls: ['./counter-input.component.scss'],
})
export class CounterInputComponent {
@ContentChild(InputRefDirective)
public input: InputRefDirective;
constructor() {}
public increment() {
this.input.increment();
}
public decrement() {
this.input.decrement();
}
}
我想这就是问题所在。我将输入元素的值绑定到指令,但增量/减量方法都不会对本机输入值产生任何影响。我想对本机输入值进行双向绑定,但似乎情况并非如此。
@Directive({
selector: 'input [myInputRef]',
})
export class InputRefDirective {
@HostBinding('type') readonly type = 'number';
@HostBinding('value') value = 5;
public increment() {
this.value++;
}
public decrement() {
this.value--;
}
}
我不知道该怎么做。如何更新原生输入的值并触发原生更改事件?
【问题讨论】:
标签: angular typescript angular-directive