Angular2 Oninit()如何指定要监视的数据绑定属性?

时间:2016-03-25 17:36:57

标签: angular

例如,我有两个输入属性:

@Input() field1;
@Input() field2;

每次初始化field1时,我都希望调用function1();每次我初始化field2时,我都希望调用function2()。我想这与OnInit相似,但并不完全相同。有没有办法解决这个问题?

谢谢!

2 个答案:

答案 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并在该方法中编写自己的更改检测逻辑。