绑定到函数时如何触发角度变化检测?

时间:2018-03-16 12:25:56

标签: angular angular-changedetection

从这两篇文章中可以看出:

我了解在更改检测时更新DOM的方式。已经发生了。我在"Everything you need to know about change detection in Angular"中无法理解的是Angular如何跟踪函数内部使用的属性,以及何时应该运行“更改检测”。

假设这是父组件视图。

<child [prop]="func()"></child>

其中func()

func() { return this.parentProp }

并且parentProp尚未在模板中使用。如果parentProp被服务更改,Angular如何知道func()取决于parentProp,因此应该触发“更改检测”。并更新视图。

1 个答案:

答案 0 :(得分:7)

Angular不了解或关心函数的内容。

Angular会在每次更改检测运行时调用func(),并比较前一个结果是否与当前结果相同。

因为调用函数并比较结果比仅将前一个值与当前值进行比较要昂贵得多,所以最好使用事件来更新具有函数结果的属性并将视图仅绑定到属性,而不是直接到函数。

如果函数在后续调用中返回不同的值(具有相同的参数值),您将在开发模式中获得异常,如

  

模型自上次检查后发生了变化