我一直在读一些关于变更检测策略的文章,但我怀疑在哪些情况下使用推送策略是有意义的。 基本上,我的疑问是什么时候我们有嵌套组件,这些组件绑定的对象不是不变的。我有两个嵌套组件,一个是父组件,一个是子组件,这两个组件都有push上的更改检测策略。我将作为输入传递给子组件formGroup。
当我在父组件上将表单设置为启用,然后调用ChangeDetectorRef时。detectChanges()(应该检查更改检测器及其子组件),我没有看到子组件上的更改(例如,启用表单时,子组件上的ngIf显示内容)。
我做错了什么或理解不好?
默认情况下,更改检测在对象引用更新时运行,这就是为什么说更改检测仅在不可变对象上运行。
你必须使用 OnPush 当组件完全依赖 Input() 绑定到它。
OnPush
Input()
您必须运行 markForChange() 上的方法 ChangeDetectorRef 内部 ngDoCheck() 在子组件中。
markForChange()
ChangeDetectorRef
ngDoCheck()
使用 this link 从中进一步了解我的答案。
我已经创建了一个项目并将其上载到 GitHub 对于您提到的场景。你可以把它作为参考。