AngularJS的$ watch功能如何工作?

SRa*_*mim 48 javascript angularjs angularjs-scope

我现在正在阅读很多关于AngularJS的内容,并且我遇到了神奇的$ watch功能.我理解如何使用它,但我想知道它是如何在后台实现的.它是时间间隔功能吗?或者是Angular在每次执行声明时都会调用此表吗?

我现在不想深入研究源代码,如果你们中的一个人已经知道答案并希望分享他对这个主题的了解,我会很高兴.

谢谢.

Mar*_*cok 76

每个消化循环都会评估所有手表(有时是多次).摘要循环是作为某个事件的结果输入的,或者调用$ apply().不会根据计时器定期调用手表.

请参阅https://docs.angularjs.org/guide/scope#integration-with-the-browser-event-loop

浏览器的事件循环等待事件到达.事件的回调被执行...一旦回调执行,浏览器就会离开JavaScript上下文并根据DOM更改重新呈现视图.Angular通过提供自己的事件处理循环来修改正常的JavaScript流.这将JavaScript分为经典和Angular执行上下文...... Angular执行[some] stimulusFn(),它通常会修改应用程序状态.Angular进入$ digest循环.循环由两个较小的循环组成,它们处理$ evalAsync队列和$ watch列表.$ digest循环不断迭代,直到模型稳定,这意味着$ evalAsync队列为空,$ watch列表未检测到任何更改.$ watch列表是一组表达式,自上次迭代后可能已更改.

在此输入图像描述