【发布时间】:2017-08-04 21:23:29
【问题描述】:
当我们使用默认策略时,这些人可能会触发更改检测(当然除了输入参数):
- 用户事件
- 定时器
- ajax 响应
但是。当您切换到 OnPush 策略 时,它仅由 事件 触发,不适用于计时器和 http。
所以问题是为什么它不适用于时间和 https 或为什么它适用于事件。
【问题讨论】:
标签: angular
当我们使用默认策略时,这些人可能会触发更改检测(当然除了输入参数):
但是。当您切换到 OnPush 策略 时,它仅由 事件 触发,不适用于计时器和 http。
所以问题是为什么它不适用于时间和 https 或为什么它适用于事件。
【问题讨论】:
标签: angular
OnPush 就是这样定义的。
触发变更检测
|async 管道收到新事件时@Input() 被更改检测更新时。ChangeDetectorRef::markForCheck 明确注册要检查的下一个更改检测轮次的组件时
ChangeDetectionStrategy.Default 为在 Angulars 区域内调用的每个异步回调触发更改检测(甚至在 Angular 应用程序中侦听的每个 DOM、每个 Observable 事件或完成的 Promise、setTimeout ......)
【讨论】:
DOM 事件,这是否包括模板内的任何(event) 绑定,还是仅包括@HostListeners?
xxx.addEventListener()、(domEvent)、@HostListener()。
OnPush,那么我猜如果你在组件的逻辑里面有xxx.addEventListener(),就不会触发变更检测,对吧?
xxx.addEventListener() 不会运行 markForCheck plnkr.co/edit/k56NahyP8bdagVbjnOPl?p=preview
ChangeDetectionStrategy.Default 一起运行,但这可能不是评论的内容。对于OnPush,只有(click) 和@HostListener()