También existe la posibilidad de que no sea un bucle infinito en absoluto. Diez iteraciones no es un número suficientemente grande para concluirlo con cierta certeza. Por lo tanto, antes de emprender una búsqueda inútil, puede ser aconsejable descartar esa posibilidad primero.
El método más fácil para hacerlo es aumentar el recuento máximo de bucles de resumen a un número mucho mayor, lo que se puede hacer en el module.configmétodo, utilizando el $rootScopeProvider.digestTtl(limit)método. Si el infdigerror ya no aparece, simplemente tiene una lógica de actualización lo suficientemente compleja.
Si se construye de datos o puntos de vista que dependen de relojes recursivas es posible que desee buscar soluciones iterativas (es decir, no depender de nuevos bucles de digerir para ser iniciado) usando while, foro Array.forEach. A veces, la estructura está muy anidada y ni siquiera es recursiva, probablemente no haya mucho que hacer en esos casos, excepto elevar el límite.
Otro método para depurar el error es mirar los datos del resumen. Si imprime bastante el JSON, obtiene una matriz de matrices. Cada entrada de nivel superior representa una iteración, cada iteración consta de una lista de entradas de vigilancia.
Si, por ejemplo, tiene una propiedad que se modifica en $watchsí misma, es fácil ver que el valor cambia infinitamente:
$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
}
]
]
Por supuesto, en proyectos más grandes esto puede no ser tan simple, especialmente porque el msgcampo a menudo tiene el valor "fn: regularInterceptedExpression"si el reloj es una {{ }}interpolación.
Aparte de eso, los métodos ya mencionados, como reducir el HTML para encontrar la fuente del problema, son por supuesto útiles.