gpt4 book ai didi

angularjs - 何时调用 $digest 循环?

转载 作者:行者123 更新时间:2023-12-03 11:50:01 26 4
gpt4 key购买 nike

当一个摘要周期发生时,我很困惑,它是每 50 毫秒基于一个​​计时器定期调用(正如它所说的 here 并暗示 here )还是在每个进入 Angular 上下文的事件之后调用(因为它说 hereherehere )?

重要的例子:

在我的模型中,我有一个名为 myVar 的变量。值为 3。
在我的 HTML 中,我有 {{myvar}} .
触发按钮单击等事件并在 Controller 中引发处理程序,处理程序内的代码是:

$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>

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

as in this plunker ,则显示给用户的字符串将保持为 Initial并且永远不要更改为 Changed .

如果您想知道为什么您经常看到对 $apply 的调用,但并非总是如此,这可能是因为 Angular 附带的各种指令,例如 ngClickngChange将调用 $apply自己,然后将触发循环。原生 JS 事件的事件监听器直接不会这样做,所以他们将不得不故意调用 $apply使所做的任何更改反射(reflect)在模板中。

关于angularjs - 何时调用 $digest 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com