8

从这两个帖子:

我了解发生“更改检测”时 DOM 是如何更新的。我从“关于 Angular 中的变更检测需要了解的一切”中无法理解的是 Angular 如何跟踪函数内部使用了哪些属性,以及何时应该运行“变更检测”。

假设这是父组件视图。

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

func()在哪里

func() { return this.parentProp }

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

4

1 回答 1

13

Angular 不知道也不关心函数的内容。

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

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

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

自上次检查后模型已更改

于 2018-03-16T12:30:08.173 回答