0

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

4

1 回答 1

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 次),这正好说明了工作中的脏检查。

我知道你最初的 plunker 的结果可能令人惊讶,但这只是展示了 AngularJS 机器是如何在幕后工作的。虽然它在大多数情况下都完全符合我们的要求,但我们需要了解它在某些极端情况下的内部工作。

于 2013-03-26T12:24:56.950 回答