【发布时间】:2020-09-15 13:04:24
【问题描述】:
我使用 Angular 9
我有存储BehaviorSubject 的父子组件和服务。所有组件都有OnPush策略
- 父组件使用异步管道订阅该服务主题
- 父组件包含子组件
- 子组件在其生命周期开始时更改该服务主题 (ngOnInit)
通过此步骤,在孩子更改可观察对象后,父母不会立即做出反应。 这是可重现的 demo 。例如,在您关注子项的输入之前,父项不会更新。
我已经调试了进程,发现在异步管道执行markForCheck 之后调用了tick 函数。所以我不明白为什么视图没有更新?
我注意到,如果我将策略更改回Default,ExpressionChangedAfterItHasBeenCheckedError 将出现,因此看起来此更改发生在主更改检测过程之外。
您能帮我解决当前方法的问题吗?按照我的描述进行更改的正确方法是什么?
【问题讨论】: