2015-09-24 30 views
10

Dies ist ein weit verbreitetes Problem:

5 $ Digest() Iterationen erreicht. Abbrechen!
Beobachter in den letzten 5 Iterationen gebrannt []

Die Dokumentation (https://docs.angularjs.org/error/ $ rootScope/infdig) erklärt, was die Situation nicht zu vermeiden zu tun.

Hin und wieder landen Sie jedoch in der Situation. Und für ein Projekt, das größer ist als eine Spielzeug-App, kann es sehr schwierig sein, die Ursache für die unendliche Digest-Schleife zu finden.

Ich suche nach Debugging-Tipps, wie ich herausfinden kann, wo der Code liegt, der die Schleife verursacht.

Antwort

2

Es kann mehrere Gründe dafür geben. Einer der häufigsten Gründe dafür ist ein Filter in der ng-repeat, der ein neues Array zurückgibt, um an der ng-repeat zu arbeiten.

Überprüfen Sie also Ihre ng-repeat Ausdrücke, die zugeordnete Filter haben, die das Array ändert.

5

Frage wurde bereits beantwortet - How to Troubleshoot Angular "10 $digest() iterations reached" Error

als Lebenslauf von zwei besten Antworten:

  1. entfernen alle verdächtigen HTML - im Grunde entfernen Sie alle Ihre HTML aus der Vorlage, und prüfen Sie, ob es keine Warnungen (https://stackoverflow.com/a/17129274/274500)
  2. passiert normalerweise, wenn Funktion ein neues Objekt (https://stackoverflow.com/a/17116322/274500)
  3. zurückgibt

Plus

können Sie immer setzen bedingten Haltepunkt hier https://github.com/angular/angular.js/blob/master/src/ng/rootScope.js#L851 die Ausnahme Stacktrace zu überprüfen.

+0

In meinem Fall war das Problem, dass es überhaupt keine Endlosschleife gab, da ich sicherstellte, dass immer die gleiche Objektreferenz zurückgegeben wurde. Ich habe ausführlich beschrieben, wie man das in [einer Antwort auf der verbundenen Frage] (http://stackoverflow.com/a/38981431/546730) debuggt. Dieser Fall ist jedoch ziemlich selten ... –

0

Für mich ist der Fehler in einem Verfahren passiert die URL zu ändern:

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

dies verursacht die $rootScope:infdig Fehler

Also, wenn diese Überprüfung Debuggen, was auch immer Ihre ur, die Lage ändert, hrefs in Ihrem Stromregler/Direktive

Verwandte Themen