Angular2 - 检测属性@Input的变化

时间:2016-03-08 22:34:51

标签: javascript angular angular2-changedetection

我有一个简单的属性指令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

1 个答案:

答案 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会更高效,因为它只与这个属性有关。