2016-07-28 24 views
0

我试图挂接临时函数进行测试,该函数返回随机数据以显示在我的视图中。这是因为它陷入循环而引发错误,所以我认为将它切换到单向绑定可以工作,但问题仍然存在。实际的错误是:一次性绑定Angular中的随机值生成方法

[$rootScope:infdig] 10 $digest() iterations reached. Aborting!

当绑定到一个方法调用返回一个随机值,为什么角陷入无限循环?一旦它返回的值不是undefined,表达式不应该停止评估吗?

plunk

注:我不是在寻找一个解决方法,我已经取代了函数调用一次性生成的随机值,但我很好奇,想知道为什么一次性绑定继续评估模型应该(从我的理解)稳定后。

回答

1

要理解为什么发生这种情况,您需要了解摘要循环。

脏检查

角是基于 “脏检查”。 Angular基本上迭代了$scope中的所有属性以查看发生了什么变化。如果有任何财产发生变化,Angular会让所有观察者知道这些变化

由于手表可以更改范围上的属性,所以Angular在手表完成后再进行一次脏检查。消化循环在遍历所有属性时停止,并且它看到它们中没有一个已经改变。

无限摘要当手表一个新的值总是设置为它不断将在Math.random()

+0

所以发生的属性时,单向数据绑定已经在消化周期没有影响?我认为它背后的想法是减少观察者的数量。 –

+0

没有任何链接到$ scope的东西被angularJS连续观看。这就是框架的工作原理 –