【问题标题】:what [$rootScope:infdig] or [$rootScope:inprog] in angular mean?角度中的 [$rootScope:infdig] 或 [$rootScope:inprog] 是什么意思?
【发布时间】:2015-09-22 14:04:37
【问题描述】:

我可以在 IE 10 控制台上的 angular js 中看到以下错误,我正在使用 angular v1.3.4。当我从一个页面导航到另一个页面时会发生此错误。

Error: [$rootScope:infdig] http://errors.angularjs.org/1.3.4/$rootScope/infdig?p0=10&p1=%5B%5B%7B%22msg%22%3A%22fn%3A%20function(a)%7Bvar%20b%3De(a)%3 .... long string which goes on
   at $digest (http://localhost:9080/WeBoM/js/libs/angular.min.js:123:176)
   at $apply (http://localhost:9080/WeBoM/js/libs/angular.min.js:125:305)
   at m (http://localhost:9080/WeBoM/js/libs/angular.min.js:80:453)
   at N (http://localhost:9080/WeBoM/js/libs/angular.min.js:85:32)
   at onload (http://localhost:9080/WeBoM/js/libs/angular.min.js:86:69)

然后,

Error: [$rootScope:inprog] http://errors.angularjs.org/1.3.4/$rootScope/inprog?p0=%24apply
   at l (http://localhost:9080/WeBoM/js/libs/angular.min.js:117:213)
   at $apply (http://localhost:9080/WeBoM/js/libs/angular.min.js:125:231)
   at Anonymous function (http://localhost:9080/WeBoM/js/libs/angular.min.js:227:245)
   at handle (http://localhost:9080/WeBoM/js/libs/jquery.min.js:3:12506)
   at dispatch (http://localhost:9080/WeBoM/js/libs/jquery.min.js:3:8493)
   at handle (http://localhost:9080/WeBoM/js/libs/jquery.min.js:3:5177)

【问题讨论】:

  • 您很可能在代码中的某处调用$apply,因为您正在从一个页面导航到另一个页面,所以它试图重新启动摘要周期,而摘要周期已经发生。也就是说,没有代码就无法确认。
  • 我查看了代码库,是的 js 文件有 $scope.$apply();和 scope.$apply(function(){ scope.$parent[attrs.visible] = true; });代码sn-ps
  • 该错误中的链接为您解释了它! ...只需点击链接

标签: javascript angularjs internet-explorer


【解决方案1】:

如果使用$scope.$apply();会出现此问题

所以无论在哪里使用它,您都需要在scope.apply 调用之前检查!$scope.$$phase 之类的条件

if(!$scope.$$phase)
{
$scope.$apply();
}

但是不要 if (!$scope.$$phase) $scope.$apply(),这意味着你的 $scope.$apply() 在调用堆栈中不够高。

我的回答只是简短的解决方案,您可以在此讨论下查看更多解决方案 AngularJS : Prevent error $digest already in progress when calling $scope.$apply()

【讨论】:

  • 就在 angular github wiki 中,据记载不使用这种方法 github.com/angular/angular.js/wiki/Anti-Patterns
  • Don't do if (!$scope.$$phase) $scope.$apply(), it means your $scope.$apply() isn't high enough in the call stack. ,这就是我发布之前讨论的原因
  • @charlietfl,Yupe,他可以从链接中看到有关它的详细信息,我将其发布在我的答案中:) :+1
  • 您的回答中没有提到这是一种不鼓励的做法,还有其他方法可以管理它
  • 这只是掩盖症状,而不是解决问题,因为问题太不完整而无法正确回答,所以无法解决。
猜你喜欢
  • 1970-01-01
  • 2015-03-21
  • 2018-07-11
  • 2019-10-16
  • 1970-01-01
  • 2014-10-02
  • 2017-03-16
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多