一尘不染

如何解决Angular“达到10次$ digest()迭代”错误

angularjs

达到10个$ digest()迭代。流产!

有很多支持文本,例如“在最近5个迭代中触发了Watchers:”等,但是其中很多文本是来自各种功能的Javascript代码。有诊断此问题的经验法则吗?是可以始终缓解的问题,还是应用程序足够复杂,因此应将其视为警告?


阅读 225

收藏
2020-07-04

共1个答案

一尘不染

正如Ven所说,您或者在每个$digest循环中返回不同(不相同)的对象,或者您将数据更改了太多次。

确定您的应用程序的哪个部分导致此行为的最快解决方案是:

  1. 删除所有可疑的HTML-基本上从模板中删除所有html,并检查是否没有警告
  2. 如果没有警告-添加您删​​除的html的一小部分,然后检查问题是否再次出现
  3. 重复第2步,直到收到警告-您将找出html的哪一部分是造成该问题的原因
  4. 进一步研究-步骤3中的部分负责使上的对象发生突变$scope或在每个$digest循环中返回不相同的对象。
  5. 如果$digest在第1步之后仍然有迭代警告,则可能是您做的非常可疑。对父模板/范围/控制器重复相同的步骤

您还想确保您没有更改自定义过滤器的输入

请记住,在JavaScript中,某些特定类型的对象的行为不像您通常期望的那样:

new Boolean(true) === new Boolean(true) // false
new Date(0) == new Date(0) // false
new String('a') == new String('a') // false
new Number(1) == new Number(1) // false
[] == [] // false
new Array == new Array // false
({})==({}) // false
2020-07-04