我发现我需要更新我的页面到我的范围手动越来越多,因为建立一个应用程序在角。
我知道这样做的唯一方法是从我的控制器和指令的范围调用$ apply()。这个问题是它不断地向控制台抛出一个错误:
Error: $digest already in progress
有谁知道如何避免这个错误或实现相同的事情,但不同的方式?
Don’t use this pattern – This will end up causing more errors than it solves. Even though you think it fixed something,it didn’t.
您可以通过检查$ scope。$$阶段来检查$ digest是否已在进行中。
if(!$scope.$$phase) { //$digest or $apply }
$ scope。如果$ digest或$ apply正在进行,$$阶段将返回“$ digest”或“$ apply”。我相信这些状态的区别是,$ digest将处理当前范围及其子节点的监视,$ apply将处理所有范围的监视器。
To @ dnc253的观点,如果你发现自己常常调用$ digest或$ apply,你可能会做错了。我通常发现我需要消化,当我需要更新作用域的状态作为一个DOM事件触发以外的Angular的结果。例如,当twitter启动模式隐藏时。有时,DOM事件在$ digest正在进行时触发,有时不会触发。这就是为什么我使用这个检查。
我想知道一个更好的方式,如果有人知道一个。
来自评论:
作者:@anddoutoi
- Don’t do
if (!$scope.$$phase) $scope.$apply()
,it means your$scope.$apply()
isn’t high enough in the call stack.