例如,我有两个输入属性:
@Input() field1;
@Input() field2;
每次初始化field1时,我都希望调用function1();每次我初始化field2时,我都希望调用function2()。我想这与OnInit相似,但并不完全相同。有没有办法解决这个问题?
谢谢!
答案 0 :(得分:5)
第一次绑定输入属性(以及随后的每个时间),根据lifecycle documentation调用ngOnChanges
挂钩。
您可以将每个属性绑定到公开新状态和以前状态的SimpleChange
对象:
ngOnChanges(changes: {[propertyName: string]: SimpleChange}) {
for (let propName in changes) {
if (propName === 'field1')
this.function1();
if (propName === 'field2')
this.function2();
}
}
答案 1 :(得分:3)
取决于
如果“initialize”总是意味着分配一个新值,那么请参阅@ DavidL的答案。
请注意,如果输入属性类型是JavaScript引用类型(数组,对象等),则“分配新值”意味着分配新的数组,对象等。它不包括修改数组项或一个Object属性。继续阅读该场景...
如果输入属性类型是JavaScript引用类型,并且“initialize”可能意味着更改Array项的值或更改Object属性的值,则无法使用{{1}},因为引用不会更改这种情况,因此角度变化检测不会将此视为变化。对于这种情况,实现ngDoCheck并在该方法中编写自己的更改检测逻辑。