javascript - AngularJS 摘要循环多久运行一次?

标签 javascript angularjs event-handling dom-events

在讨论 AngularJS 的优点时,双向数据绑定(bind)通常被吹捧为 Angular 优于其他 JS 框架的主要优点。 Digging deeper ,文档表明这个过程是通过脏检查而不是通过事件驱动的措施来完成的。起初,digest-loop 的工作原理似乎是让一个方法在后台定期触发,在每个周期检查所有的 $watches。然而,进一步阅读,似乎摘要循环实际上是由 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/

相关文章:

C#动态添加事件处理器

javascript - 根据 Angular 中的另一个字段设置输入字段的默认值

javascript - Angular Fire Auth 后未收到响应

javascript - 如果第二个不为空,则 Ng-options 下拉连接字段

javascript - Angular : Two Way Data Binding in a Custom Directive Not Working

objective-c - 在 UIWebView (iOS) 中监听事件

javascript - 为 JSON 数据传输选择合适的压缩方案

javascript - 在 Bootstrap 中设置默认下拉值

javascript - 无法从 useEffect 更新 React 状态 Hook

javascript - "input"事件的多个事件监听器