Também existe a possibilidade de não ser um loop infinito. 10 iterações não é um número suficientemente grande para concluir isso com alguma certeza. Portanto, antes de partir para uma caçada selvagem, é aconselhável descartar essa possibilidade primeiro.
O método mais fácil de fazer isso é aumentar a contagem máxima do loop de resumo para um número muito maior, o que pode ser feito no module.configmétodo, usando o $rootScopeProvider.digestTtl(limit)método. Se oinfdig erro não aparecer mais, você simplesmente tem alguma lógica de atualização suficientemente complexa.
Se você construir dados ou visualizações com base em relógios recursivos, você pode querer procurar soluções iterativas (ou seja, não depender de novos loops de resumo para serem iniciados) usando while, forouArray.forEach . Às vezes, a estrutura é altamente aninhada e nem mesmo recursiva, provavelmente não há muito a ser feito nesses casos, exceto aumentar o limite.
Outro método de depurar o erro é examinar os dados de resumo. Se você imprimir o JSON, obterá uma série de matrizes. Cada entrada de nível superior representa uma iteração, cada iteração consiste em uma lista de entradas de observação.
Se você, por exemplo, tem uma propriedade que é modificada em $watchsi mesma, é fácil ver que o valor está mudando 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
}
]
]
Claro que em projetos maiores isso pode não ser tão simples, especialmente porque o msgcampo geralmente tem o valor "fn: regularInterceptedExpression"se o relógio for um{{ }} interpolação.
Além disso, os métodos já mencionados, como cortar o HTML para encontrar a origem do problema, são obviamente úteis.