我正在阅读这篇文章,我对变更检测操作是如何工作的感到困惑。https://vsavkin.com/change-detection-in-angular-2-4f216b855d4c
概念:
change说它不做脏检查,没有两个绑定,就像在AngularJS 1.X中一样。然而,我从Docs和很少的博客+堆栈中了解到,每个组件都有一个变化检测器。
但是,在这个堆栈溢出中,@Gunter的响应如下:了解角度2中的变化检测
使用ChangeDetectionStrategy.OnPush角运行更改检测,在更新in @ runs ()时,会收到DOM事件角侦听,或者异步管道接收到一个新值。
据我所知,它有一个倾听者从角度上倾听每一个变化。其次,如果我使用runOutsideAngular,它不是在该组件或操作上创建变更检测器对象吗?
其他情况是,如果您显式地(this.zone.runOutsideAngular())或者出于其他原因,代码运行在Angulars区域之外,修改了组件的状态,这也不会被涵盖(即使代码是一个事件处理程序)。
变更检测器生命周期的小子问题:
问题1:是有观察者还是事件侦听器?
问题2:这是否意味着无论我们使用changeDetectorStartegy.onPush还是.Default,每个组件都有一个活动的变更检测器对象?
问题3:如果我在角度应用程序中有1000个组件对象,那么这些变化检测器对象在每个组件实现中的影响是什么?尤其是应用程序的内存配置文件。
问题4:如何管理它,使其不影响浏览器中应用程序的内存配置文件
问题5:有什么地方/资源可以让我获得与变更检测器和ngZone相关的生命周期?
更新:请求一个人,而不是标记这个问题关闭,我会建议回答一个严肃的问题。我感谢你帮助我理解基本的工作理念。
发布于 2017-06-01 05:09:24
这是一个相当宽泛的问题--这两篇文章应该给你一个很好的理解:
问题1:是有观察者还是事件侦听器? 问题2:这是否意味着,无论我们使用changeDetectorStartegy.onPush还是.Defau,每个组件都有一个活动的变更检测器对象。
不,变化探测器不是监听者。角度上的每个部件都表示为视图。因此,应用程序是一棵视图树。当您在组件中注入ChangeDetectorRef时,本质上是在此视图周围注入一个包装器。每个视图都有一个状态,该状态指示是否应该检查该视图上的绑定。OnPush只是将此状态设置为disabled,因此不对视图/组件执行检查。如果绑定更改,则角将状态设置为CheckOnce,以便只检查视图一次,直到下一次绑定更改为止。
问题3:如果我在角度应用程序中有1000个组件对象,那么这些变化检测器对象在每个组件实现中的影响是什么?尤其是应用程序的内存配置文件。 问题4:如何管理它,使其不影响浏览器中应用程序的内存配置文件
正如我前面所解释的,没有一个单独的变化探测器。它是一个视图的包装。视图仍然存在,因为它是角表示遮罩下的组件树的方式。
有什么地方/资源可以让我获得与变更检测器和ngZone相关的生命周期?
对于变化检测器来说,没有生命周期这样的东西。
https://stackoverflow.com/questions/44298214
复制相似问题