Mik*_*unn 13 angular2-forms angular2-directives angular
我有一个简单的Angular 2指令,它修改了文本框的输入值.请注意,我正在使用模型驱动的表单方法.
@Directive({
selector: '[appUpperCase]'
})
export class UpperCaseDirective{
constructor(private el: ElementRef, private control : NgControl) {
}
@HostListener('input',['$event']) onEvent($event){
console.log($event);
let upper = this.el.nativeElement.value.toUpperCase();
this.control.valueAccessor.writeValue(upper);
}
}
Run Code Online (Sandbox Code Playgroud)
dom正确更新,但模型会在每次其他击键后更新.看看plnkr
sil*_*sod 28
这让我感到震惊,因为我之前遇到过这种情况,并且一直在挠头.
重新审视这个问题,您需要做的是更改this.control.valueAccessor.writeValue(upper)ControlValueAccessor显式写入DOM元素的位置,而不是控件本身而不是调用
this.control.control.setValue(upper);
Run Code Online (Sandbox Code Playgroud)
这将更改控件上的值,并在页面和控件的属性中正确反映. https://angular.io/docs/ts/latest/api/forms/index/ControlValueAccessor-interface.html
ControlValueAccessor抽象化将新值写入表示输入控件的DOM元素的操作.
这是一个分叉的plunker:http://plnkr.co/edit/rllNyE07uPhUA6UfiLkU?p = preview
| 归档时间: |
|
| 查看次数: |
7918 次 |
| 最近记录: |