Angular 2 ngOnChanges仅用于特定绑定

mue*_*ich 7 javascript angular

是否有可能只检测angular2中特定绑定属性的更改?

 export class Test{
     @Input() a;
     @Input() b;
     constructor() {
         }

     ngOnChanges(){
         //I want that this only called when a changed
         console.log(this.a);
     }
}
Run Code Online (Sandbox Code Playgroud)

Thi*_*ier 13

正如埃里克所说,这个ngOnChanges方法将在你@Input的每次更新时被调用.

如果您只想检测@Input"a" 的更新,可以使用setter:

export class SubComponent {
  @Input()
  set a(a:string) {
    this._a = a;
    console.log('a updated');
  }

  @Input()
  b:any;

  (...)
}
Run Code Online (Sandbox Code Playgroud)

请参阅此plunkr:https://plnkr.co/edit/UKyRiq p = preview .

  • 使用setter时要注意一点:组件设置器只应更新组件和/或其子组件的视图状态,而不是应用程序模型.如果要更新应用程序模型,则会破坏单向数据流,并且父视图可能不会更新.另见[Savkin的博客文章](http://victorsavkin.com/post/114168430846/two-phases-of-angular-2-applications),"Angular如何强制执行它?"部分.了解更多相关信息. (4认同)
  • 如果绑定是一个数组,则不会调用setter,如果删除/添加了项,则数组引用不会更改.在那种情况下,ngDoCheck来救援. (3认同)