根据http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/:
这是脏检查。现在已经检查了所有
$watch
,还有其他问题要问:是否有任何$watch
已更新?如果其中至少有一个已更改,则循环将再次触发,直到所有$watch
报告没有更改。这是为了确保每个模型都是干净的。请记住,如果循环运行超过10次,它将抛出异常以防止无限循环。
根据我的理解,如果我把它放在我看来:
{{ date }}
这在我的控制器中
$interval(function () {
$scope.date = new Date();
}, 1)
应该发生的是:
date
的$观察者报告其值已更改; date
的$观察者报告其价值再次发生变化(因为它每1ms更改一次)但事实并非如此。代码运行正常,视图一直在更新,不会引发任何错误。
为什么?
答案 0 :(得分:2)
你从未达到10个摘要周期的限制,因为每次$ interval运行时它都会开始一个新的周期。
查看标题为"与浏览器事件循环集成的部分"在Angular developer guide。
在您的方案中,$ interval正在生成新的浏览器事件。该事件导致Angular的$apply()
函数正在运行。此过程完成。然后在下一个时间间隔,生成一个新事件并重新开始该过程。