Maxing sur les itérations de $ digest
Je suis en train de jouer autour avec les directives et les =
de liaison dans ce violon. J'obtiens l'erreur suivante:
Uncaught Error: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: [["fn: function () {\n var parentValue = parentGet(parentScope);\n\n if (parentValue !== scope[scopeName]) {\n //we are out of sync and need to copy\n if (parentValue !== lastValue) {\n //parent changed and it has precedence\n lastValue = scope[scopeName] = parentValue;\n } else {\n //if the parent can be assigned then do so\n parentSet(parentScope, lastValue = scope[scopeName]);\n }\n }\n return parentValue;\n }; newVal: {\"baz\":3}; oldVal: {\"baz\":3}"],["fn: function () {\n var parentValue = parentGet(parentScope);\n\n if (parentValue !== scope[scopeName]) {\n //we are out of sync and need to copy\n if (parentValue !== lastValue) {\n //parent changed and it has precedence\n lastValue = scope[scopeName] = parentValue;\n } else {\n //if the parent can be assigned then do so\n parentSet(parentScope, lastValue = scope[scopeName]);\n }\n }\n return parentValue;\n }; newVal: {\"baz\":3}; oldVal: {\"baz\":3}"],["fn: function () {\n var parentValue = parentGet(parentScope);\n\n if (parentValue !== scope[scopeName]) {\n //we are out of sync and need to copy\n if (parentValue !== lastValue) {\n //parent changed and it has precedence\n lastValue = scope[scopeName] = parentValue;\n } else {\n //if the parent can be assigned then do so\n parentSet(parentScope, lastValue = scope[scopeName]);\n }\n }\n return parentValue;\n }; newVal: {\"baz\":3}; oldVal: {\"baz\":3}"],["fn: function () {\n var parentValue = parentGet(parentScope);\n\n if (parentValue !== scope[scopeName]) {\n //we are out of sync and need to copy\n if (parentValue !== lastValue) {\n //parent changed and it has precedence\n lastValue = scope[scopeName] = parentValue;\n } else {\n //if the parent can be assigned then do so\n parentSet(parentScope, lastValue = scope[scopeName]);\n }\n }\n return parentValue;\n }; newVal: {\"baz\":3}; oldVal: {\"baz\":3}"],["fn: function () {\n var parentValue = parentGet(parentScope);\n\n if (parentValue !== scope[scopeName]) {\n //we are out of sync and need to copy\n if (parentValue !== lastValue) {\n //parent changed and it has precedence\n lastValue = scope[scopeName] = parentValue;\n } else {\n //if the parent can be assigned then do so\n parentSet(parentScope, lastValue = scope[scopeName]);\n }\n }\n return parentValue;\n }; newVal: {\"baz\":3}; oldVal: {\"baz\":3}"]] angular.js:7729
Scope.$digest angular.js:7729
Scope.$apply angular.js:7894
(anonymous function) angular.js:930
invoke angular.js:2788
bootstrap angular.js:928
angularInit angular.js:904
(anonymous function) angular.js:14397
trigger angular.js:1695
(anonymous function) angular.js:1930
forEach angular.js:110
eventHandler angular.js:1929
Pourquoi est-ce arrivé? Je pense qu'il a quelque chose à voir avec la =
de liaison.
source d'informationauteur Nick Heiner
Vous devez vous connecter pour publier un commentaire.
C'est parce qu'il est est la création d'une marque nouvel objet à chaque fois qu'il passe par le recueil de cycle. Les montres sont enregistrés dans ce
=
de la liaison de données, et donc à chaque fois il évaluebar="{baz: 3}"
un nouvel objet est créé, et donc elle sera différente de la valeur précédente, déclenchement d'un autre digérer boucle. Finalement, il abandonne alors qu'il ne tourne pas en boucle à l'infini. Voir http://docs.angularjs.org/guide/concepts#runtime pour une explication plus approfondie.Le truc est de faire le
=
databing avec une référence à ne pas être en train de changer à chaque fois. Cela se fait généralement par l'avoir dans le champ d'application à l'extérieur de la directive. Voir http://jsfiddle.net/u4BTu/7/Il y a un moyen d'atteindre un objet littéral de l'expression sur le modèle HTML:
C'est extraite de ma liste Angulaire de liaison des exemples. Numéro 6: https://gist.github.com/CMCDragonkai/6282750
Ajouter ce code à votre définition de l'application ou app.js Cela permettra d'accroître digestTtl pour appliation.