C'è anche la possibilità che non sia affatto un loop infinito. 10 iterazioni non è un numero sufficientemente elevato per concludere con certezza. Quindi, prima di andare a caccia di oche selvatiche, potrebbe essere consigliabile escludere prima questa possibilità.
Il metodo più semplice per farlo è aumentare il numero massimo di cicli digest a un numero molto maggiore, cosa che può essere eseguita nel module.configmetodo, utilizzando il $rootScopeProvider.digestTtl(limit)metodo. Se lainfdig errore non viene più visualizzato, è sufficiente disporre di una logica di aggiornamento sufficientemente complessa.
Se crei dati o viste che si basano su orologi ricorsivi, potresti voler cercare soluzioni iterative (cioè non fare affidamento su nuovi cicli digest da avviare) usando while, foro Array.forEach. A volte la struttura è solo altamente annidata e nemmeno ricorsiva, probabilmente non c'è molto da fare in quei casi se non aumentare il limite.
Un altro metodo per eseguire il debug dell'errore è esaminare i dati del digest. Se stampi abbastanza il JSON, ottieni un array di array. Ogni voce di primo livello rappresenta un'iterazione, ogni iterazione consiste in un elenco di voci di controllo.
Se ad esempio hai una proprietà che si modifica in a $watchsu se stessa è facile vedere che il valore cambia all'infinito:
$scope.vm.value1 = true;
$scope.$watch("vm.value1", function(newValue)
{
$scope.vm.value1 = !newValue;
});
[
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
],
[
{
"msg":"vm.value1",
"newVal":false,
"oldVal":true
}
],
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
],
[
{
"msg":"vm.value1",
"newVal":false,
"oldVal":true
}
],
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
]
]
Ovviamente in un progetto più ampio questo potrebbe non essere così semplice, soprattutto perché il msgcampo ha spesso il valore "fn: regularInterceptedExpression"se l'orologio è un{{ }} un'interpolazione.
Oltre a questo, i metodi già menzionati, come tagliare l'HTML per trovare l'origine del problema, sono ovviamente utili.