这种行为正常吗? http://plnkr.co/edit/P1TsiIJbV3MvAjHuJRmF?p=preview - 集合中的两个项目和 ranTimes 被调用 20 次或更多次..
最佳答案
实际上它运行了 10 次,然后中止并出现 Error: 10 $digest() iterations returned。正在中止!
(打开控制台查看错误)。
这是预期的行为,因为 AngularJS 依赖模型的脏检查来确定何时/重绘 DOM 的哪一部分。我不想在这里重复 Misko 的精彩解释(所以一定要检查这篇文章: https://stackoverflow.com/a/9693933/1418796 ),但总之,你得到的模型永远不会稳定,因为你有相互依赖的移动部件。
要查看 run()
方法调用的实际数量,您可以稍微修改您的 plunker 并在控制台上输出结果:http://plnkr.co/edit/fYvguOiM2Y2ocOk02yEN?p=preview正如您所看到的,该函数总共运行了 4 次(每个项目 2 次),这准确地说明了脏检查的工作原理。
我知道你最初的 plunker 的结果可能会令人惊讶,但这只是展示了 AngularJS 机制在幕后是如何工作的。虽然它在大多数情况下都完全符合我们的要求,但我们需要了解它在像这样的一些极端情况下的内部工作原理。
关于javascript - ng-repeat 中的 Angularjs 函数调用了项目长度的多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15636238/