2015-09-24 13 views
10

Questo è un problema comune:

5 $ digest() iterazioni raggiunto. Interruzione!
osservatori sparati negli ultimi 5 iterazioni: []

La documentazione (https://docs.angularjs.org/error/ $ rootScope/infdig) spiega cosa NON fare per evitare la situazione.

Tuttavia, una volta ogni tanto, si finisce comunque nella situazione. E per un progetto più grande di un'app giocattolo, trovare la causa del ciclo infinito di digest può essere davvero difficile.

Sto cercando dei suggerimenti per il debug su come posso scoprire dove si trova il codice che causa il loop.

risposta

2

Ci possono essere molteplici ragioni. Uno dei motivi comuni che ho dovuto affrontare è dovuto a un filtro nel ng-repeat che restituisce un nuovo array per funzionare su ng-repeat.

Quindi controlla le tue espressioni ng-repeat che hanno filtri associati che sta modificando la matrice.

5

questione è stato già risposto qui - How to Troubleshoot Angular "10 $digest() iterations reached" Error

come un riassunto dei due migliori risposte:

  1. rimuovere tutti i sospetti HTML - fondamentalmente rimuovere tutto il codice HTML dal modello, e controllare se ci sono nessun avviso (https://stackoverflow.com/a/17129274/274500)
  2. in genere accade quando la funzione restituisce un nuovo oggetto (https://stackoverflow.com/a/17116322/274500)

più

si può sempre mettere condizionale breakpoint qui https://github.com/angular/angular.js/blob/master/src/ng/rootScope.js#L851 controllare lo stacktrace eccezione.

+0

Nel mio caso il problema era che non c'era alcun ciclo infinito, poiché mi sono assicurato di restituire sempre lo stesso riferimento all'oggetto. Ho dettagliato come eseguire il debug in [una risposta alla domanda collegata] (http://stackoverflow.com/a/38981431/546730). Questo caso è piuttosto raro però ... –

0

Per me l'errore stava accadendo in un metodo che cambia l'url:

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

questo stava causando l'errore $rootScope:infdig

Così, quando il debug di questo controllo tutto ciò che sta cambiando le vostre ur, posizione, HREF nella vostra controller corrente/direttiva

Problemi correlati