代码之家  ›  专栏  ›  技术社区  ›  Emanuel Pinho

无不变目标push的角度变化检测策略

  •  4
  • Emanuel Pinho  · 技术社区  · 6 年前

    我一直在读一些关于变更检测策略的文章,但我怀疑在哪些情况下使用推送策略是有意义的。 基本上,我的疑问是什么时候我们有嵌套组件,这些组件绑定的对象不是不变的。我有两个嵌套组件,一个是父组件,一个是子组件,这两个组件都有push上的更改检测策略。我将作为输入传递给子组件formGroup。

    当我在父组件上将表单设置为启用,然后调用ChangeDetectorRef时。detectChanges()(应该检查更改检测器及其子组件),我没有看到子组件上的更改(例如,启用表单时,子组件上的ngIf显示内容)。

    我做错了什么或理解不好?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Arjun Panicker    6 年前

    默认情况下,更改检测在对象引用更新时运行,这就是为什么说更改检测仅在不可变对象上运行。

    你必须使用 OnPush 当组件完全依赖 Input() 绑定到它。

    您必须运行 markForChange() 上的方法 ChangeDetectorRef 内部 ngDoCheck() 在子组件中。

    使用 this link 从中进一步了解我的答案。

    我已经创建了一个项目并将其上载到 GitHub 对于您提到的场景。你可以把它作为参考。