一次绑定到Angular中的随机值生成方法



我试图挂接一个临时函数进行测试,该函数返回一个随机日期以显示在我的视图中。这是一个错误,因为它被卡在了一个循环中,所以我认为将它切换到单向绑定是可行的,但问题仍然存在。实际错误为:

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

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

示例plunk

注意:我不是在寻找修复方法,我已经用一次性生成的随机值替换了函数调用,但我很想知道为什么在模型应该(根据我的理解)稳定后,一次性绑定会继续评估

要理解为什么会发生这种情况,您需要了解摘要周期。

脏检查

Angular基于"脏检查"。Angular基本上遍历$scope中的所有属性,以查看发生了什么变化。如果任何属性发生变化,Angular会激发所有这些属性的观察者,让他们知道的变化

由于手表可以更改作用域的属性,Angular在手表完成后会运行另一轮脏检查。当消化循环对所有属性进行迭代,发现它们都没有改变时,消化循环就停止了。

当手表总是为Math.random() 中连续发生的属性设置新值时,就会出现无限摘要

最新更新