javascript - AngularJS:你能从多个 $scope.$apply() 调用中得到 'digest in progress' 错误吗?

标签 javascript angularjs

在一个可能有很大作用域的大型应用程序中,如果您快速连续多次调用 $scope.$apply,您会得到“作用域已经在进行中”的错误吗?

例如,我有一个链接到 bootstrap switch 的指令插入。该指令仅显示一个开/关开关,用户可以单击该开关将 bool 值切换为真/假。每次用户单击此按钮时,我的指令都会执行一个 $scope.$apply(),其中一个范围变量会更改以反射(reflect)开关的新状态(打开或关闭)。

我担心如果用户快速连续点击开关,我可能会收到“摘要已在进行中”的错误。然而,情况并非如此,尽管多次 $scope.$apply() 调用被触发,但每次都非常顺利并且范围值随处更新。

这是因为 $scope.$apply 以某种方式进行了优化,因此它不会运行完整的摘要,而只会更新那些已更改的值,或者仅仅是因为我的范围相对较小目前,完整的摘要不会花很长时间运行?

最佳答案

Javascript 是单线程的。每次调用 $apply() 都会同步运行。获得该错误的唯一方法是从已在 Angular 上下文中调用的函数中调用 $apply()。

我有多个大块显示/隐藏 block 的数组,没有问题。 Javascript 和 Angular 非常优化。

关于javascript - AngularJS:你能从多个 $scope.$apply() 调用中得到 'digest in progress' 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473500/

相关文章:

javascript - angularJS 在指令之间共享方法

javascript - Angular 范围。$eval 返回未定义。我可以检查表达式是否存在于范围内吗?

javascript - Angular JS 脚本应用程序始终使用 Wcf 服务返回 True

javascript - 在 iPad 中隐藏地址栏

javascript - 使用 JavaScript 正则表达式的条件渲染

angularjs - 为什么 Controller 对路线更新没有响应?

angularjs - 如何使用 Typescript 实现过滤器?

javascript - 如何将 jQuery 包含到我的应用程序中?

javascript - React 异步函数不是一个函数

javascript - 为什么乒乓球会卡在底部?