ng-repeat内的Angularjs函数调用的次数超过了项目的长度

时间:2013-03-26 11:42:56

标签: javascript function angularjs ng-repeat

这种行为是正常的吗? http://plnkr.co/edit/P1TsiIJbV3MvAjHuJRmF?p=preview - 集合中的两个项目和runTimes被调用20次或更多次。

1 个答案:

答案 0 :(得分:3)

实际上它运行了10次,然后使用Error: 10 $digest() iterations reached. Aborting!中止(打开控制台查看错误)。

这是预期的行为,因为AngularJS会继续对模型进行脏检查,以确定何时/需要重绘DOM的哪个部分。我不想在这里重复Misko的优秀解释(所以一定要查看这篇文章:https://stackoverflow.com/a/9693933/1418796)但简而言之,你所拥有的模型永远不会稳定,因为你有相互依赖的活动部件

要查看run()方法调用的实际数量,您可以稍微修改您的plunker并在控制台上输出结果:http://plnkr.co/edit/fYvguOiM2Y2ocOk02yEN?p=preview如您所见,此功能总共运行4次(2次)每个项目)正好说明了工作中的脏检查。

我知道你的初始弹药的结果可能会令人惊讶,但这只是展示了AngularJS机械如何工作。虽然它在大多数时候完全符合我们的要求,但我们需要了解它在这样的一些极端情况下的内部工作。