4

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

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

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

4

1 回答 1

4

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

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

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

使用此链接从媒体进一步了解我的答案。

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

于 2018-03-01T02:56:03.003 回答