Angular 2:忽略ngOnChanges的第一次触发?

Hit*_*mar 6 angular

是否有任何角度2方式跳过ngOnChanges的第一个触发器?目前我正在使用这种天真的方法来忽略它:

isFirst: boolean = true;

  ngOnChanges(changes: SimpleChanges) {
    if (this.isFirst) {
      this.isFirst = false;
      return;
    }
    console.log(changes);
  }
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 10

您可以使用

https://angular.io/docs/ts/latest/api/core/index/SimpleChange-class.html#!#isFirstChange-anchor

if(changes['prop'].isFirstChange()) {
}
Run Code Online (Sandbox Code Playgroud)

  • 或使用`if(changes ['prop']。previousValue)` (2认同)

Wil*_*ire 8

要添加到先前的答案并对此进行更多解释...

changes是已更改的对象数组。因此,如果您有一个 input myInput,则需要通过执行changes['myInput']. myInput包含:

  • previousValue - 对象的先前值(更改前)
  • currentValue - 已更改对象的当前值
  • firstChange- 关于这是否是第一次发生变化的布尔值(注意,当组件初始化时这将是真,否则为假) -isFirstChange()如果这是第一次变化,将返回真。

代码:

//your input
@Input() myInput: any;

ngOnChanges(changes: any) {
  //check if this isn't the first change of myInput
  if(!changes['myInput'].isFirstChange()) {
    //do something
  }
}
Run Code Online (Sandbox Code Playgroud)