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

时间:2018-02-28 23:28:25

标签: angular immutability angular-forms angular-changedetection

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

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

我做错了什么或不理解?

1 个答案:

答案 0 :(得分:3)

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

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

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

使用媒体中的this link来进一步了解我的答案。

我创建了一个项目并将其上传到GitHub上,用于您提到的方案。您可以将它用作参考。