Angularjs 调试$rootScope:infdig

Angularjs 调试$rootScope:infdig,angularjs,Angularjs,这是一个常见的问题: 已达到5$digest()迭代次数。流产 在过去5次迭代中激发的观察者:[] 文档($rootScope/infdig)解释了避免这种情况不应该做的事情 然而,偶尔,你也会陷入这样的境地。对于一个比玩具应用程序更大的项目来说,找到无限摘要循环的原因是非常困难的 我正在寻找调试提示,说明如何找出导致循环的代码所在的位置。可能有多种原因。我遇到的一个常见原因是ng repeat中有一个过滤器,它返回一个新数组来处理ng repeat 因此,请检查您的ng repeat表达式,这

这是一个常见的问题:

已达到5$digest()迭代次数。流产
在过去5次迭代中激发的观察者:[]

文档($rootScope/infdig)解释了避免这种情况不应该做的事情

然而,偶尔,你也会陷入这样的境地。对于一个比玩具应用程序更大的项目来说,找到无限摘要循环的原因是非常困难的


我正在寻找调试提示,说明如何找出导致循环的代码所在的位置。

可能有多种原因。我遇到的一个常见原因是
ng repeat
中有一个过滤器,它返回一个新数组来处理
ng repeat


因此,请检查您的
ng repeat
表达式,这些表达式具有修改数组的关联筛选器。

问题已在此处得到回答-

作为两个最佳答案的简历:

  • 删除所有可疑HTML-基本上从模板中删除所有HTML,并检查是否没有警告()
  • 通常在函数返回新对象时发生
  • 加上


    您始终可以在此处放置条件断点来检查异常stacktrace。

    对于我来说,更改url的方法中发生了错误:

      self.setURL = function(item) {
        var mainUrl = window.location.origin + '#/' + self.baseUrl;
        if (item) {
          mainUrl += item.testId;
        }
        $location.$$absUrl = mainUrl;
      };
    
    > self.setURL = function(item) {
    >    
    > 
    >//Ajax call followed by promise function
    >      servicejsfile.somefunctiom(transferObj).then(responce){
    >        
    
    > var somethingTrue=responce.featureAvailable;
    >if (somethingTrue) {
    > dothis();
    >}else
    > $window.location = newlocation;
    > };
    
    这导致了
    $rootScope:infdig
    错误


    因此,在调试此检查时,无论您当前控制器/指令中的ur、位置、HREF发生了什么变化,我都认为错误发生在更改url的方法中:

      self.setURL = function(item) {
        var mainUrl = window.location.origin + '#/' + self.baseUrl;
        if (item) {
          mainUrl += item.testId;
        }
        $location.$$absUrl = mainUrl;
      };
    
    > self.setURL = function(item) {
    >    
    > 
    >//Ajax call followed by promise function
    >      servicejsfile.somefunctiom(transferObj).then(responce){
    >        
    
    > var somethingTrue=responce.featureAvailable;
    >if (somethingTrue) {
    > dothis();
    >}else
    > $window.location = newlocation;
    > };
    
    这将更改我的应用程序URL的最后一部分。 这导致$rootScope:infdig错误

    所以在调试时,我注释掉了这一部分,错误并没有随着应用程序需求的改变而重复

    我无法修复此问题,因此我们的要求保持不变,我可以更改位置


    这个问题发生在控制器函数中的某个Ajax调用中,只有在IE中,对于FF、chrome和safari,它的表现才完美,因为JavaScript引擎对于这些浏览器来说速度更快。

    在我的例子中,问题是根本没有无限循环,因为我确保始终返回相同的对象引用。我已经详细介绍了如何在中调试它。但这种情况很少见。。。