AngularJS:当调用$ scope时,防止错误$ digest已经在进行$ apply()

前端之家收集整理的这篇文章主要介绍了AngularJS:当调用$ scope时,防止错误$ digest已经在进行$ apply()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我发现我需要更新我的页面到我的范围手动越来越多,因为建立一个应用程序在角。

我知道这样做的唯一方法是从我的控制器和指令的范围调用$ 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

angular.js Anti Patterns

  1. Don’t do if (!$scope.$$phase) $scope.$apply(),it means your $scope.$apply() isn’t high enough in the call stack.
原文链接:https://www.f2er.com/angularjs/148095.html

猜你在找的Angularjs相关文章