首页 文章

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

提问于
浏览
2

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

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

我做错了什么或不理解?

1 回答

  • 3

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

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

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

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

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

相关问题