Attualmente sto lavorando su qualche codice con contenuto pigro + controller. Il mio codice funziona fondamentalmente come this fiddle. Tuttavia, per qualche ragione, la mia versione non funziona, e invece ottengo an infinite digest cycle ogni volta che angolare tenta di aggiornare la sua vista.Debug del ciclo di digest di Angular: come trovare la causa di un ciclo infinito?
Il problema scompare quando rimuovo ng-include
da questa semplice affermazione di ripetizione:
<div class="container" ng-repeat="pageName in pageNames">
<div ng-include="pageName"></div>
</div>
parte più strana: Il exact same error
si verifica anche se pageNames
non viene mai assegnato al campo di applicazione. Entrambi gli ambiti (l'ambito del controller esterno e interno - I have each one) possono essere completamente vuoti (ho controllato con Batarang - Ho solo due ambiti vuoti), e ottengo ancora l'errore.
Il mio codice è un po 'troppo complicato, con troppe altre dipendenze, quindi postarlo qui non ha senso. La versione più pura è il violino sopra. Non riesco a trovare una differenza nella logica tra i due. Quando ho ispezionare i miei scopi con Batarang, non vedo nulla di sospetto o:
- non sto usando funzioni nei miei ambiti
- non ho fatto uso di
$watch
- Non ho fatto uso di
ng-model
Concludo che non sto cambiando esplicitamente nulla, quindi deve essere qualcosa sotto il cappuccio dell'angolare.
Posso in qualche modo ottenere Angular o Batarang per dirmi quali variabili di ambito sono cambiate dopo un'iterazione di digest, quindi posso identificare il colpevole che causa il ciclo infinito?
UPDATE:
ho finalmente capito che history.pushState
pasticci tutto. Sto ora esaminando le alternative, come il servizio $location
. Tuttavia, mi piacerebbe ancora sapere come eseguire il debug di questo tipo di problema in generale. Qualche suggerimento?
C'è qualche motivo per cui non è possibile utilizzare una versione non terminata di angularjs nel proprio ambiente di sviluppo e basta impostare un punto di interruzione nella sua funzione digest()? – Fordio
Imposta devtools per interrompere tutte le eccezioni, incluse le eccezioni rilevate. Se sei bloccato con il codice miniato, rimuovi il minifoto o stampa il javascript. – ivarni