【发布时间】:2013-08-28 03:14:07
【问题描述】:
在您可能拥有较大范围的大型应用程序中,如果您快速连续多次调用$scope.$apply,您会收到“范围已在进行中”错误吗?
例如,我有一个链接到 bootstrap switch 插件的指令。该指令仅显示一个开/关开关,用户可以单击该开关将布尔值切换为真/假。每次用户单击此按钮时,我的指令都会执行$scope.$apply(),其中更改一个范围变量以反映开关的新状态(打开或关闭)。
我担心如果用户快速连续点击开关,我可能会收到“正在消化”错误。然而,情况并非如此,每次事情进展得非常顺利,并且尽管触发了多个$scope.$apply() 调用,但范围值会立即在各处更新。
这是因为$scope.$apply 以某种方式进行了优化,因此它不会运行完整的摘要,而只会更新那些已更改的值,还是只是因为我的范围目前相对较小,所以完整的摘要不是'运行时间不长吗?
【问题讨论】:
-
您几乎不需要调用 $scope.$apply。如果您提供示例,我相信我们可以提供帮助。
-
@ZackArgyle 我确实在问题中举了一个例子,基本上是引导开关的指令,每次用户单击开关时,它都会触发对 $scope.$apply 的调用以更新更改变量
-
哦,我真的不认为有人会比摘要循环更快地点击。试试看,看看能不能点击够快!
-
@ZackArgyle 没错,我不能。但周期会一直保持这么快,还是会随着范围变大而减慢?
-
@click-update 如果您想更加确定,请设置一个像这个家伙这样的安全应用功能。 Angular Safe Apply
标签: javascript angularjs