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

时间:2017-04-14 06:10:31

标签: angular

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

{{1}}

5 个答案:

答案 0 :(得分:8)

答案 1 :(得分:4)

添加到上一个答案并再解释一下......

changes是已更改的对象数组。因此,如果您有输入myInput,则需要通过执行changes['myInput']来访问更改数组中的该对象。 myInput包含:

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

代码:

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

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

答案 2 :(得分:2)

如果您有很多输入,但是不确定是否设置了其中一个,则可以使用

ngOnChanges(changes: SimpleChanges) {
    const isFirstChange = Object.values(changes).some(c => c.isFirstChange());
}

当心::如果根本没有设置@Input,则isFirstChange将是false,因为Array.some停在第一个{{1} }值。

答案 3 :(得分:1)

为了安全起见,我总是这样做,它就像一种魅力。

ngOnChanges(changes: { [key: string]: SimpleChange }): void {
if (changes['propertyName'] &&
      changes['propertyName'].previousValue !== undefined &&
      !changes['propertyName'].isFirstChange() ) {}
}

答案 4 :(得分:0)

要检查这里是否任何更改,您可以执行以下操作:

  ngOnChanges(changes: SimpleChanges) {
    Object.keys(changes).forEach(key => {
      if (changes[key].previousValue != undefined) {
          // Do your stuff
      }
    })
  }