AngularJs错误:“10 $ digest()迭代到达。中止!”

时间:2014-02-19 19:41:07

标签: angularjs

jsFiddle:http://jsfiddle.net/ADukg/4766/

我写了一些实际上正常工作的基本角度代码,我得到了理想的结果和输出。但是,我在控制台中出现了一些错误,这些错误会导致循环并最终导致浏览器崩溃。我在这里已经阅读了一些类似的问题,但似乎无法获得使用我的代码的解决方案。

任何人都可以弄清楚出了什么问题以及如何解决?

Error: 10 $digest() iterations reached. Aborting!

1 个答案:

答案 0 :(得分:3)

从您的函数中,您必须返回一个稳定的对象(或接近稳定的对象)。因为var函数中有getBreakdown个新对象,angular认为它们是新的,并使用新的hashkey将它们放在范围内。

Angular然后再次运行此$digest,以检查以确保没有任何更改...但它会看到新对象并假设模型未稳定。它再次运行它......再次获得新对象......再次......再次。

故事的寓意是你不应该在分配给范围的函数内创建新模型。

如果您不需要实时绑定,只需将此var转换为新的$ scope var一次,不要绑定到该函数。如果您需要实时绑定,我认为您的解决方案是使用过滤器。

btw ...在函数返回之前添加console.log(breakdown),检查数组中的每个对象,你会看到它输出10次,每个$$hashkey值都不同。 Angular使用$$hashkey来跟踪对象。我认为理解你是如何混淆它会更容易。

我用来教人们这个概念的例子是一个返回随机数的函数。如果你试图绑定到那个函数......每次获取一个新的随机数并且从不稳定时,angular会消化它10次。 Angular不会知道它已经消化了......永远。这就是为什么他们将它限制在10个。