加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

当$digest循环被调用时,

发布时间:2020-12-17 08:07:00 所属栏目:安全 来源:网络整理
导读:当一个摘要循环发生时,我很困惑,是按照每50ms的定时器定期(称之为 here和暗示 here)或者在进入角度上下文的每个事件之后调用定时器(正如 here, here和 here)? 事情的例子: 在我的模型中,我有一个名为myVar的变量,值为3。 在我的html中,我有{{myvar}}
当一个摘要循环发生时,我很困惑,是按照每50ms的定时器定期(称之为 here和暗示 here)或者在进入角度上下文的每个事件之后调用定时器(正如 here, here和 here)?

事情的例子:

在我的模型中,我有一个名为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来进行任何反映在模板中的更改。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读