在讨论 AngularJS 的优点时,双向数据绑定通常被认为是 Angular 相对于其他 JS 框架的主要优点。深层发掘 https://docs.angularjs.org/guide/scope#integration-with-the-browser-event-loop,文档表明这个过程是通过脏检查而不是通过事件驱动的措施来完成的。起初,摘要循环似乎是通过定期在后台触发一个方法来工作的,检查所有$watch
es 在每个周期。然而,进一步阅读,似乎摘要循环实际上是由rootScope.digest()
,这又是由$.apply
,这又由事件(!)触发,例如onClick
事件通过调用ng-click
.
但是,这怎么可能呢?我以为有角不使用更改侦听器 https://stackoverflow.com/questions/9682092/databinding-in-angularjs。那么摘要循环到底是如何运作的呢?Angular 是否会在内部自动启动摘要循环,或者摘要循环是由事件触发的?如果摘要循环自动运行,那么它运行的频率是多少?
一些澄清点:
- 我不是问手动绑定更改时摘要循环如何运行。在这种情况下,如果您想强制摘要循环,可以通过调用
$.apply()
- 我也没有询问摘要循环响应用户事件的频率。例如,如果 ng-model 在输入框中,当用户开始输入时,Angular 将启动摘要循环。令人困惑的部分是,为了知道用户正在打字,Angular 不使用基于事件的
onKeyUp
某处?
- 我已经知道每个摘要循环最多有 10 个周期的限制。我的问题不是关于每个摘要循环的周期数,而是关于每秒运行的摘要循环的数量。
- 额外问题:摘要循环与 JavaScript 事件循环有何关系? JS 事件循环是否在后台定期运行?摘要循环与事件循环相同,但仅在“Angular Context”中?这些是完全不同的想法吗?
Angular 摘要被触发 - 它们不是通过轮询发生的。
代码执行,代码完成后,Angular 会触发摘要。
Example:
element.on('click', function() {
$scope.$apply(function() {
// do some code here, after this, $digest cycle will be triggered
});
});
Angular 还会在编译/链接阶段之后触发 $digest:
Compile > Link > Digest
至于触发多少个消化周期?这取决于范围变量多久稳定下来。通常至少需要 2 个周期才能确定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)