Отладка $rootScope: infdig

Это обычная проблема:

5 $digest() итераций. Aborting!
  Наблюдатели стреляли в последние 5 итераций: []

Документация (https://docs.angularjs.org/error/ $rootScope/infdig) объясняет, что НЕ делать, чтобы избежать ситуации.

Однако, время от времени, вы все равно оказываетесь в ситуации. И для проекта, большего, чем игрушечное приложение, найти причину бесконечного цикла дайджеста может быть очень сложно.

Я ищу отладочные подсказки о том, как я могу узнать, где находится код, который вызывает цикл.

Ответ 1

вопрос уже был дан здесь - Устранение неполадок Angular "10 $digest() итераций, достигнутых" Ошибка

как резюме двух лучших ответов:

  • удалить все подозрительные HTML - в основном удалить все ваши html из шаблона и проверить, нет ли предупреждений (fooobar.com/questions/76474/...)
  • обычно это происходит, когда функция возвращает новый объект (fooobar.com/questions/76474/...)

плюс

вы всегда можете поставить условную точку останова здесь https://github.com/angular/angular.js/blob/master/src/ng/rootScope.js#L851, чтобы проверить исключение stacktrace.

Ответ 2

Это может быть несколько причин. Одна из распространенных причин, по которым я столкнулся, связана с фильтром в ng-repeat, который возвращает новый массив для работы с ng-repeat.

Итак, проверьте выражения ng-repeat, которые имеют связанные фильтры, которые изменяют массив.

Ответ 3

Для меня ошибка произошла в методе, изменяющем URL:

  self.setURL = function(item) {
    var mainUrl = window.location.origin + '#/' + self.baseUrl;
    if (item) {
      mainUrl += item.testId;
    }
    $location.$$absUrl = mainUrl;
  };

это вызывало ошибку $rootScope:infdig

Итак, при отладке этой проверки все, что меняет ваш ur, местоположение, hrefs в вашем текущем контроллере/директиве