Il y a aussi la possibilité que ce ne soit pas du tout une boucle infinie. 10 itérations n'est pas un nombre suffisamment grand pour en conclure avec une certaine certitude. Donc, avant de se lancer dans une chasse à l'oie sauvage, il peut être conseillé d'exclure d'abord cette possibilité.
La méthode la plus simple pour ce faire consiste à augmenter le nombre maximal de boucles de condensé à un nombre beaucoup plus grand, ce qui peut être fait dans la module.config
méthode, à l'aide de la $rootScopeProvider.digestTtl(limit)
méthode. Si l' infdig
erreur n'apparaît plus, vous disposez simplement d'une logique de mise à jour suffisamment complexe.
Si vous créez des données ou des vues reposant sur des montres récursives, vous pouvez rechercher des solutions itératives (c'est-à-dire ne pas compter sur de nouvelles boucles de condensé pour démarrer) en utilisant while
, for
ouArray.forEach
. Parfois, la structure est simplement très imbriquée et même pas récursive, il n'y a probablement pas grand-chose à faire dans ces cas, à part augmenter la limite.
Une autre méthode de débogage de l'erreur consiste à examiner les données de résumé. Si vous imprimez assez le JSON, vous obtenez un tableau de tableaux. Chaque entrée de niveau supérieur représente une itération, chaque itération se compose d'une liste d'entrées de surveillance.
Si vous avez par exemple une propriété qui est modifiée en a $watch
sur elle-même, il est facile de voir que la valeur change à l'infini:
$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
}
]
]
Bien sûr, dans un projet plus important, cela peut ne pas être aussi simple, d'autant plus que le msg
champ a souvent la valeur "fn: regularInterceptedExpression"
si la montre est une {{ }}
interpolation.
En dehors de cela, les méthodes déjà mentionnées, comme la réduction du code HTML pour trouver la source du problème, sont bien sûr utiles.