我有一个HttpClient
正在更新后端数据的服务。在后端处理期间,我通过执行以下操作来显示加载状态this.isLoading = true
,成功处理后,我将删除该加载状态subscribe()
通过使用this.isLoading = false;
.
现在我改变了我的代码来使用ChangeDetectionStrategy.OnPush
并且加载状态不再消失。我知道变化检测ChangeDetectionStrategy.OnPush
当发生input
属性更改或在组件等事件期间更改对象引用时。
就我而言,我是否必须手动调用ChangeDetectorRef.detectChanges()
触发更改检测还是我错过了什么?
Edit
只是为了澄清,我正在使用this.isLoading
通过相应地添加/删除 HTML 元素上的类来显示/隐藏加载状态。例如,
<div [class.processing]="isLoading"></div>
将 ChangeDetectionStrategy 设置为 OnPush 时,仅当输入发生更改时才会运行更改检测。由于您正在订阅可观察对象并更改局部变量,因此 Angular 将不会收到此更改的通知,因此您必须自己通知它。
推荐的方法是使用 ChangeDetectorRef.markForCheck() ,它将在组件上方的树枝上执行更改检测
这里有更多关于这方面的信息很棒的思想文章 https://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html#observables
以及一个优秀的帕斯卡·普雷希特 (Pascal Precht) 的演讲 https://pascalprecht.github.io/slides/angular-2-change-detection-explained
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)