AngularJS:你能从多个$ scope获得'正在进行摘要'错误。$ apply()调用?

时间:2013-08-27 19:04:43

标签: javascript angularjs

在您可能拥有较大范围的大型应用中,如果您快速连续多次致电$scope.$apply,您是否可以获得正在进行中的范围'错误?

例如,我有一个链接到bootstrap switch插件的指令。该指令只显示一个开/关开关,用户可以单击该开关将布尔值切换为true / false。每次用户单击此按钮时,我的指令执行$scope.$apply(),其中一个范围变量被更改以反映开关的新状态(打开或关闭)。

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

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

1 个答案:

答案 0 :(得分:1)

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

我有多个大块显示/隐藏块的数组数组没有问题。 Javascript和Angular已经过优化。