我正在阅读这篇文章,并对更改检测操作的工作原理感到困惑。https://vsavkin.com/change-detection-in-angular-2-4f216b855d4c
这个概念:
Angular 表示它不会进行脏检查,也没有像 AngularJS 1.X 中那样进行两次绑定和监视。然而,我从文档和一些博客+堆栈中了解到,每个组件都附加了一个更改检测器。
然而,从这个堆栈溢出与 @Gunter 的响应在这里:了解 Angular 2 中的变化检测
使用 ChangeDetectionStrategy.OnPush Angular 运行更改检测,当 @Input() 更新时,接收到 Angular 侦听的 DOM 事件,或者异步管道 (| async) 接收到新值。
据我所知,它有一个监听器,可以监听角度的每一个变化。其次,如果我使用 runOutsideAngular,它不会在该组件或操作上创建更改检测器对象吗?
其他情况是,如果您显式 (this.zone.runOutsideAngular()) 或由于某些其他原因在 Angulars 区域之外运行的代码会修改组件的状态,则这也不会被覆盖(即使代码是事件处理程序)。
变更检测器生命周期的小子问题:
问题一:是有一个观察者还是一个事件监听者?
问题2:这是否意味着无论我们使用changeDetectorStartegy.onPush还是.Default,每个组件都有一个活动的变更检测器对象?
问题3:如果 Angular 应用程序中有 1000 个组件对象,那么每个组件实现中的这些变更检测器对象有何影响?特别是对于应用程序的内存配置文件
问题4:如何管理它,使其不会影响浏览器中应用程序的内存配置文件
问题5:是否有一个地方/资源可以获取关联的变更检测器和 ngZone 的生命周期?
更新:请求某人而不是将这个问题标记为
关闭 我建议回答一个严肃的问题。我很欣赏
您帮助理解基本的工作概念。
这是一个相当广泛的问题 - 这两篇文章应该可以让您很好地理解:
- Angular 的 $digest 在 Angular 新版本中重生
- 关于 Angular 中的变更检测您需要了解的一切
问题1:是有观察者还是事件
听众?
问题2:是否意味着有主动变化检测器
每个组件的对象,无论我们使用
ChangeDetectorStartegy.onPush 或 .Defau
不,变化检测器不是监听器。 Angular 中的每个组件都表示为一个视图。因此,该应用程序是一个视图树。当您在组件中注入 ChangeDetectorRef 时,您实际上是在该视图周围注入一个包装器。每个视图都有一个状态,指示是否应检查该视图上的绑定。 OnPush 只是将此状态设置为disabled
因此不会对视图/组件执行任何检查。如果绑定发生变化,Angular 会将状态设置为 CheckOnce,以便视图仅检查一次,直到下次绑定发生变化。
问题 3:这些变化检测器对象有什么影响?
如果我有 1000 个组件对象,则每个组件实现
角度应用?特别是对于内存配置文件
应用
问题4:如何管理才能不影响内存
浏览器中应用程序的配置文件
正如我上面所解释的,不存在单独的变化检测器这样的东西。它是视图的包装。视图无论如何都存在,因为它是 Angular 在底层表示组件树的方式。
是否有地方/资源可以获取变更的生命周期
检测器和 ngZone 相关吗?
变更检测器不存在生命周期之类的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)