我很想知道角度js如何观察添加到$scope
的属性发生的突变。从HTML的角度来看,我能够得到它,我们有一些事件会在发生变化时被触发。但是当它关于一个物体时,我无法理解它是如何工作的。我可以看到我们有一个名为Object.observe
的函数。但是,这也被写为here。我非常确定angular不使用Object.observe。角度的文档说,可以使用$watch
和$watchCollection
观察突变。但我无法了解这些通知的方式。任何人都可以帮忙吗?
答案 0 :(得分:4)
Angular实际上会获取被监视对象的副本,并在每个摘要循环中对其进行比较。事情发生变化时没有通知。它寻找每个循环的变化。这就是为什么观看会很昂贵的原因。您拥有的手表越多,需要进行的比较就越多,并且在发现更改的情况下,您可能最终会进行新的运行以确保检测到的更改不会影响其中一个受监控的对象你已经检查过
我建议Tero Parviainen写这本书'Build you own AngularJS'。即使它不是100%准确的源重建,但概念是相同的,您将对角度如何工作有很好的了解。
理解这部分角度的另一个来源是'The Digest Loop and $apply'的'ng-book'章。这里描述的概念采用比Teros书更“可访问”的形式。