1

在您可能拥有较大范围的大型应用程序中,如果您$scope.$apply快速连续多次调用,您会收到“范围已在进行中”错误吗?

例如,我有一个链接到引导开关插件的指令。该指令仅显示一个开/关开关,用户可以单击该开关将布尔值切换为真/假。每次用户单击此按钮时,我的指令$scope.$apply()都会更改一个范围变量以反映开关的新状态(打开或关闭)。

我担心如果用户快速连续单击开关,我可能会收到“正在消化”错误。但是,情况并非如此,每次事情进展得非常顺利,并且尽管$scope.$apply()触发了多个调用,但范围值会立即在各处更新。

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

4

1 回答 1

2

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

我有多个显示/隐藏块的大块的数组,没有问题。Javascript 和 Angular 进行了相当优化。

于 2013-08-27T19:14:07.777 回答