是否有任何角度2方法可以跳过ngOnChanges的第一个触发器?目前我正在使用这种天真的方法来忽略它:
{{1}}
答案 0 :(得分:8)
您可以使用
https://angular.io/docs/ts/latest/api/core/index/SimpleChange-class.html#!#isFirstChange-anchor
if(changes['prop'].isFirstChange()) {
}
答案 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)
如果您有很多输入,但是不确定是否设置了其中一个,则可以使用
isFirstChange
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
}
})
}