没有不可变对象的推送时的角度变化检测策略

Ema*_*nho 6 immutability angular angular-forms angular-changedetection

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

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

我做错了什么或者没有很好地理解?

Arj*_*ker 8

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

OnPush当您的组件仅依赖Input()于其绑定时,您必须使用更改检测策略。

您必须在子组件内部markForChange()运行该方法。ChangeDetectorRefngDoCheck()

使用媒体中的此链接来进一步理解我的答案。

我已经为你提到的场景创建了一个项目并将其上传到GitHub上。您可以参考一下。