如何知道ngOnChanges中哪些@Input更改?

Hon*_*iao 14 typescript angular

我正在使用Angular 2.

现在我有两个@input aabb.我想要做:

  1. 如果有aa变化,请做点什么.
  2. 如果有bb变化,做其他事情.

如何知道哪些@Input更改ngOnChanges?谢谢

  @Input() aa;
  @Input() bb;

  ngOnChanges(changes: { [propName: string]: SimpleChange }) {
    // if aa changes, do something
    // if bb changes, do other thing
  }
Run Code Online (Sandbox Code Playgroud)

awi*_*man 21

可能会这样做

ngOnChanges(changes: { [propName: string]: SimpleChange }) {
  if( changes['aa'] && changes['aa'].previousValue != changes['aa'].currentValue ) {
    // aa prop changed
  }
  if( changes['bb'] && changes['bb'].previousValue != changes['bb'].currentValue ) {
    // bb prop changed
  }
}
Run Code Online (Sandbox Code Playgroud)

不过,我对未定义的属性进行定义感到惊讶.从食谱中,我预计只会定义更改的属性.

https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-on-changes

如果这太冗长,您也可以尝试使用setter方法:

_aa: string;
_bb: string;

@Input() set aa(value: string) {
  this._aa = value;
  // do something on 'aa' change
}

@Input() set bb(value: string) {
  this._bb = value;
  // do something on 'bb' change
}
Run Code Online (Sandbox Code Playgroud)

https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-setter

  • 我大胆地演示了此行为:http://plnkr.co/edit/dZO3atoWWiES6jIWIyzY?p=preview (2认同)