Angular2 - 立即更新绑定属性

时间:2017-12-08 21:43:02

标签: angular data-binding binding

一开始我有一个简单的问题:"何时以及为什么Angular2中的绑定被评估/更新?"

我希望实现绑定属性将在设置源代码时立即更新。

这个非常简单的plunker演示演示了这种行为:

Plunker demo

代码中最有趣的部分:

setValue() {
   console.log(this.childComponent.prop);
   this.propValue = "button clicked";
   //NOW I WANT TO GET THE NEW VALUE
   console.log(this.childComponent.prop);
}

模板中更新的插值表示正确评估了绑定并更新了目标属性,但有时稍后会超出setValue方法范围。

为什么我要这种行为?

我知道组件交互的这种工作方式不是必需的,但是......我有一个更复杂的自定义表单控件(实现ControlValueAccessor)。现在我正在研究一些"业务流程":这个复杂组件的ngModel是更复杂对象的一部分,可以被更多组件访问,这些组件通常可以相互影响对象的一部分

简化示例:

模型

{
 public modelA: SomeClasss; <-- this is ngModel of comp. A
 public modelB: SomeClasss; {...} <-- this is ngModel of comp. B
}

同时代码中的其他地方:

update(X: SomeClass) {
    this.modelA = X;
    this.componentA.updateMagicUI();
}

updateMagicUI方法带有一些复杂的逻辑,使用ComponentA的内部结构基于它的新设置值。请注意,当且仅当显式调用它时,我才想执行此逻辑,而不是每次更改值时都执行此逻辑。

1 个答案:

答案 0 :(得分:0)

this answer中建议触发变更检测的一种方法是调用tick的{​​{1}}方法:

ApplicationRef

您可以在this plunker中进行测试。