当$digest循环被调用时,

前端之家收集整理的这篇文章主要介绍了当$digest循环被调用时,前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当一个摘要循环发生时,我很困惑,是按照每50ms的定时器定期(称之为 here和暗示 here)或者在进入角度上下文的每个事件之后调用定时器(正如 hereherehere)?

事情的例子:

在我的模型中,我有一个名为myVar的变量,值为3。
在我的html中,我有{{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年的消化循环的描述就是这样

code that runs at an interval

是非常误导,说实话,当提到Angular时,我甚至会说错。引用Pawel Kozlowski,Mastering Web Application Development with AngularJS

AngularJS does not use any kind of polling mechanism to periodically check for model changes

为了证明没有轮询,如果你有一个模板

<p>{{state}}</p>

和控制器代码

$scope.state = 'Initial';
// Deliberately *not* using $timeout here
$window.setTimeout(function() {
  $scope.state = 'Changed';
},1000);

as in this plunker,则显示用户的字符串将保持为“初始”,从不更改为“已更改”。

如果您想知道为什么经常会看到$ apply的呼叫,但并不总是这样,那么可能是因为Angular所带来的各种指令(如ngClick或ngChange)将调用$应用自身,然后触发循环。对本地JS事件的事件监听器直接不会这样做,所以他们必须刻意调用$ apply来进行任何反映在模板中的更改。

猜你在找的Angularjs相关文章