Il est également possible que ce ne soit pas du tout une boucle infinie. 10 itérations n'est pas un nombre suffisamment important pour conclure avec certitude. Avant de se lancer dans une course folle, il est donc préférable d'écarter d'abord cette possibilité.
La méthode la plus simple pour y parvenir est d'augmenter le nombre maximal de boucles de résumé à un nombre beaucoup plus grand, ce qui peut être fait dans l'interface de l'utilisateur. module.config
en utilisant la méthode $rootScopeProvider.digestTtl(limit)
méthode. Si le infdig
n'apparaît plus, vous avez simplement une logique de mise à jour suffisamment complexe.
Si vous construisez des données ou des vues reposant sur des montres récursives, vous pouvez rechercher des solutions itératives (c'est-à-dire ne reposant pas sur le lancement de nouvelles boucles de digestion) en utilisant la méthode suivante while
, for
o Array.forEach
. Parfois, la structure est simplement très imbriquée et pas même récursive, il n'y a probablement pas grand-chose à faire dans ces cas-là, si ce n'est augmenter la limite.
Une autre méthode de débogage de l'erreur consiste à examiner les données du condensé. Si vous imprimez le JSON, vous obtenez un tableau de tableaux. Chaque entrée de niveau supérieur représente une itération, chaque itération consiste en une liste d'entrées de veille.
Si vous avez par exemple une propriété qui est modifiée dans une $watch
sur lui-même, il est facile de voir que la valeur change infiniment :
$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 de plus grande envergure, cela peut ne pas être aussi simple, d'autant plus que l'équipe de la msg
a souvent la valeur "fn: regularInterceptedExpression"
si la montre est un {{ }}
interpolation.
En dehors de cela, les méthodes déjà mentionnées, comme le découpage du HTML pour trouver la source du problème, sont bien sûr utiles.