2

私は単純な Attribute Directivemaskを持っています。@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ですか?

4

1 に答える 1

4

maskより広範な代わりに、プロパティにセッターメソッドを使用できますngOnChanges

@Directive({
  selector: 'mask'
})
export class MaskDirective implements AfterViewInit {
  @Input set mask(newValue: string) {
    $(this.el.nativeElement).mask(newValue);
  }

  constructor(public el: ElementRef) {};


}

セッターは、このプロパティのみに関連するため、より効率的になります。

于 2016-03-08T23:03:04.767 に答える