在AngularJS中,您可以使用的$watch功能指定观察者以观察范围变量的变化$scope。在Angular中监视变量更改(例如,在组件变量中)相当于什么?
$watch
$scope
在Angular 2中,更改检测是自动的… $scope.$watch()和$scope.$digest()RIP
$scope.$watch()
$scope.$digest()
不幸的是,开发指南的“变更检测”部分尚未编写(“ 体系结构概述”页面底部“其他内容” 附近有一个占位符)。
这是我对变更检测的工作原理的理解:
setTimeout()
$timeout
Angular构建并维护“变化检测器”树。每个组件/指令只有一个这样的变化检测器(类)。(您可以通过注入来访问该对象ChangeDetectorRef。)这些变化检测器是在Angular创建组件时创建的。他们跟踪所有绑定的状态,以进行脏检查。从某种意义上讲,它们类似于$watches()Angular 1为{{}}模板绑定设置的自动功能。 与Angular 1不同,更改检测图是有向树,不能有循环(这使Angular 2的性能更高,如下所示)。
ChangeDetectorRef
$watches()
{{}}
当事件触发时(在Angular区域内),我们编写的代码(事件处理程序回调)将运行。它可以更新所需的任何数据-共享应用程序模型/状态和/或组件的视图状态。
之后,由于添加了挂接Zone.js,它将运行Angular的更改检测算法。默认情况下(即,如果未onPush在任何组件上使用更改检测策略),则从树顶开始按深度优先顺序对树中的每个组件进行一次检查(TTL = 1)…。(好吧,如果您处于开发人员模式,则更改检测运行两次(TTL = 2)。有关更多信息,请参见ApplicationRef.tick()。)它将使用那些更改检测器对象对所有绑定执行脏检查。
onPush
ngOnChanges()
ngDoCheck()
对于找到的任何绑定更改,将更新组件,然后更新DOM。变更检测到此结束。
其他参考以了解更多信息: