当消化周期正在发生的事情,我很困惑,是基于每50ms定时器它定期调用(因为它说,在这里,并暗示在这里,或者它的每一个进入的角度范围内(因为它说,事件发生后呼吁在这里,在这里还有这里?
重要的示例:
在我的模型中,我有一个名为myVar3的变量。在我的HTML中,我有{{myvar}}。触发按钮单击之类的事件并在控制器中引发一个处理程序,该处理程序内的代码为:
myVar
{{myvar}}
$scope.myVar = 4; // some heavy actions takes place for 3 seconds... $scope.myVar = 5;
假设UI线程未被阻止,则单击按钮后用户将看到什么?他只会看到5还是会看到4,然后在3秒后看到5?
我认为摘要循环的描述在http://blog.bguiz.com/post/60397801810/digest-cycles-in-single- page-apps中是
间隔运行的代码
是非常误导的,并且说实话,当谈到Angular时,我什至会说错。引用Pawel Kozlowski,AngularJS掌握Web应用程序开发
AngularJS不使用任何轮询机制来定期检查模型更改
为了证明没有轮询,如果您有一个模板
<p>{{state}}</p>
和控制器代码
$scope.state = 'Initial'; // Deliberately *not* using $timeout here $window.setTimeout(function() { $scope.state = 'Changed'; },1000);
就像在这个监听器中一样,向用户显示的字符串将保留为Initial且永不更改为Changed。
Initial
Changed
如果您想知道为什么经常看到对的调用$apply,但并非总是如此,那可能是因为Angular附带的各种指令(例如ngClick或ngChange将$apply自己调用)会触发循环。直接针对本机JS事件的事件侦听器将不会执行此操作,因此必须故意调用$apply以使所做的任何更改都反映在模板中。
$apply
ngClick
ngChange