小编典典

$ digest循环何时被调用?

angularjs

当消化周期正在发生的事情,我很困惑,是基于每50ms定时器它定期调用(因为它说,在这里,并暗示在这里,或者它的每一个进入的角度范围内(因为它说,事件发生后呼吁在这里,在这里还有这里?

重要的示例:

在我的模型中,我有一个名为myVar3的变量。在我的HTML中,我有{{myvar}}。触发按钮单击之类的事件并在控制器中引发一个处理程序,该处理程序内的代码为:

$scope.myVar = 4;
// some heavy actions takes place for 3 seconds...
$scope.myVar = 5;

假设UI线程未被阻止,则单击按钮后用户将看到什么?他只会看到5还是会看到4,然后在3秒后看到5?


阅读 257

收藏
2020-07-04

共1个答案

小编典典

我认为摘要循环的描述在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

如果您想知道为什么经常看到对的调用$apply,但并非总是如此,那可能是因为Angular附带的各种指令(例如ngClickngChange$apply自己调用)会触发循环。直接针对本机JS事件的事件侦听器将不会执行此操作,因此必须故意调用$apply以使所做的任何更改都反映在模板中。

2020-07-04