Angular JS错误:达到10$digest()迭代.正在中止

Angular JS Error: 10 $digest() iterations reached. Aborting

本文关键字:迭代 digest 错误 JS 达到 Angular      更新时间:2023-09-26

我正在使用angularjs谷歌地图,在试图将我的客户作为地图上的标记进行循环时出错。

<map>
  <custom-marker ng-repeat="cust in customers" position="[ {{ cust.lat }}, {{ cust.lon }} ]">
    <div class="{{ cust.category }}">{{ cust.name }}</div>
  </custom-marker>
</map>

这个错误似乎与cust.categorycust.name有关,因为当我删除它们时,它们可以正常工作。

这是我收到的错误消息的前几行:

Watchers fired in the last 5 iterations: [["[ cust.category , cust.name ]; newVal:
['"pro'",'"Fred'"]; oldVal: ['"pro'",'"Fred'"]","fn: function (context) {'n          
try {'n for(var i = 0, ii = length, part; i<ii; i++) {'n

此处显示完整的错误消息。

如有任何帮助,我们将不胜感激。提前感谢!

更新

这里是自定义标记指令的代码,它是谷歌地图的一部分。

摘要循环似乎陷入了循环。Angular有一个摘要循环,在这个循环中,他们观察模型(无论$scope上有什么),并在模型发生变化时对视图进行更改。如果在一个摘要周期中,你正在执行某个函数,该函数再次更改值,那么你正在触发另一个摘要循环,该循环再次触发同一个函数,更改模型上的值,并触发一个无限循环的摘要循环。

也就是说,您可能需要为customMarker指令添加代码,以获得更精确的答案。

为什么要绑定class="{{cust.category}}",尝试使用ng-class。你也可以在ng-reeat中使用track-by-$index吗?我在ios9上运行我的ionic应用程序时遇到了这个错误。他们发布了一个补丁来修复这个问题。

这样的代码:

scope.$watch('[' + varsToWatch.join(',') + ']'...

级联后看起来像"[obj1.prop, obj2.prop]"
表达式,如$parse解析的表达式,并导致在每次迭代时对数组的新实例求值self,即使内部没有任何更改。

您应该在调用$watch之前对其进行插值/解析,并编写一个条件,该条件只会在相关数据实际更改时发生更改。


$watchfunction(watchExp, listener, objectEquality, prettyPrintExpression)
您可以尝试使用第三个参数(objectEquality)按值比较数组,但不能按引用相等进行比较。

@param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of comparing for reference equality.