与角度ChangeDetectionStategy.OnPush应用程序对子组件的混淆

时间:2019-04-17 16:24:22

标签: angular angular2-changedetection

根据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更改检测,以防止子组件重新评估吸气剂?这是正确的吗?

0 个答案:

没有答案