输入更改时的Angular2调用函数

Bün*_*gül 21 javascript data-binding angular

子组件:

export class Child {
    @Input() public value: string;
    public childFunction(){...}
}
Run Code Online (Sandbox Code Playgroud)

父组件:

export class Parent {
    public value2: string;
    function1(){ value2 = "a" }
    function2(){ value2 = "b" }
}
Run Code Online (Sandbox Code Playgroud)

家长观点:

<child [value]="value2">
Run Code Online (Sandbox Code Playgroud)

每次在这个结构中更改value2时,有没有办法调用childFunction()?

Gün*_*uer 37

您可以使用ngOnChanges() 生命周期钩子

export class Child {
    @Input() public value: string;

    ngOnChanges(changes) {
      this.childFunction()
    }
    public childFunction(){...}
}
Run Code Online (Sandbox Code Playgroud)

或使用二传手

export class Child {
    @Input() 
    public set value(val: string) {
      this._value = val;
      this.childFunction();
    }
    public childFunction(){...}
}
Run Code Online (Sandbox Code Playgroud)

  • 我注意到 ngOnChanges() 只有在父输入属性被重新分配时才会在子组件中被调用。如果发生任何其他操作,例如如果父输入属性是一个数组并且将新值推送给它们,则子项不会更新。正确的? (3认同)
  • 在第一种方法中,我们可以确定更改了哪个变量吗? (2认同)
  • `changes` 参数包含每个更改输入的条目。有关更多详细信息,请参阅上面的“生命周期挂钩”链接。 (2认同)
  • 它运作良好,非常感谢! (2认同)
  • @Aiguo 如果它不在数组中,请尝试克隆数组并将新属性推送到新的克隆数组 - 如果您希望角度检测更改。 (2认同)