根据docs ChangeDetectionStrategy.OnPush
“适用于所有子指令,不能被覆盖。”据我了解,为父组件设置OnPush
更改检测足以跳过子组件的视图更新,直到它们的@Input
绑定值不变为止。
下面是stackblitz上具有以下组件结构的示例:
应用程序组件-> cmp1-> cmp2-> cmp3
每个cmp *组件都显示一些由display
getter评估的值。 App,cmp1和cmp2渲染按钮可更改子组件输入值。
https://stackblitz.com/edit/angular-change-detection-with-getters
当我在changeDetection: ChangeDetectionStrategy.OnPush
装饰器中设置AppComponent
仅 时,每次单击按钮时都会评估所有三个display
吸气剂,即使相应的组件输入保持不变(打开) devtools控制台查看日志)。
仅通过为每个组件设置ChangeDetectionStrategy.OnPush
(尝试取消注释)才能达到所需的行为。那是
更改cmp1的输入仅触发cmp1吸气剂
更改cmp2的输入会触发cmp1和cmp2吸气剂
更改cmp3的输入会触发cmp1,cmp2和cmp3吸气剂
为什么要为每个组件设置OnPush更改检测,以防止子组件重新评估吸气剂?这是正确的吗?