我有一个简单的属性指令mask
,其中包含@Input() mask:string
我希望能够检测mask
绑定的变化并做出反应
我可以用某种方式使用ngOnChanges
,但我觉得这就像用大刷子绘制问题
示例/简化的指令代码:
@Directive({
selector: 'mask'
})
export class MaskDirective implements AfterViewInit {
@Input() mask: string;
constructor(public el: ElementRef) {};
ngAfterViewInit() {
$(this.el.nativeElement).mask(this.mask);
}
}
用法:
<input type='text' [mask]='someBinding'>
当someBinding
的值发生变化时,如何执行某些代码而不依赖ngChanges
?
答案 0 :(得分:4)
您可以使用mask
属性的setter方法而不是更广泛的ngOnChanges
:
@Directive({
selector: 'mask'
})
export class MaskDirective implements AfterViewInit {
@Input set mask(newValue: string) {
$(this.el.nativeElement).mask(newValue);
}
constructor(public el: ElementRef) {};
}
Setter会更高效,因为它只与这个属性有关。