在讨论 AngularJS 的优点时,双向数据绑定(bind)通常被吹捧为 Angular 优于其他 JS 框架的主要优点。 Digging deeper ,文档表明这个过程是通过脏检查而不是通过事件驱动的措施来完成的。起初,digest-loop 的工作原理似乎是让一个方法在后台定期触发,在每个周期检查所有的 $watch
es。然而,进一步阅读,似乎摘要循环实际上是由 rootScope.digest()
触发的,而 $.apply
又反过来触发了它,而后者又是由事件 (!) 触发,例如通过 ng-click
调用的 onClick
事件。
但是,这怎么可能呢?我以为 Angular doesn't use change listeners .那么摘要循环究竟是如何运作的呢? Angular 是在内部自动启动摘要循环,还是由事件触发摘要循环?如果摘要循环是自动运行的,它多久运行一次?
一些澄清点:
- 我不是在询问在手动绑定(bind)到更改时摘要循环如何运行。在这种情况下,如果您想强制进行摘要循环,可以通过调用
$.apply()
来实现
- 我也不是在询问摘要循环响应用户事件的频率。例如,如果 ng-model 在输入框上,Angular 将在用户开始输入时启动摘要循环。令人困惑的部分是,为了知道用户正在键入,Angular 是否在某处使用了基于事件
onKeyUp
? - 我已经知道每个摘要循环最多有 10 个循环的限制。我的问题不是每个摘要循环的周期数,而是每秒运行的摘要循环数。
- 奖励问题:摘要循环与 JavaScript 事件循环有何关系? JS事件循环是否在后台周期性运行?摘要循环是否与事件循环相同,但仅在“Angular 上下文”中?这些是完全不同的想法吗?
最佳答案
Angular 摘要被触发 - 它们不会通过轮询发生。
代码执行,代码执行完毕后,angular触发摘要
例子:
element.on('click', function() {
$scope.$apply(function() {
// do some code here, after this, $digest cycle will be triggered
});
});
Angular 还会在编译/链接阶段之后触发 $digest:
Compile > Link > Digest
以及触发了多少个摘要循环?这取决于范围变量稳定的时间。通常至少需要 2 个周期才能确定。
关于javascript - AngularJS 摘要循环多久运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25177704/