Angular HttpClient 中的更改检测

Angular Change Detection in HttpClient

我有一项 HttpClient 服务正在后端更新数据。在后端处理期间,我通过 this.isLoading = true 显示加载状态,在成功处理后,我通过使用 this.isLoading = false;.[= 删除 subscribe() 中的加载状态21=]

现在我更改了我的代码以使用 ChangeDetectionStrategy.OnPush 并且加载状态不再消失。我知道 ChangeDetectionStrategy.OnPush 中的变化检测发生在 input 属性 发生变化或对象引用在组件等事件期间发生变化时

在我的情况下,我是否必须手动调用 ChangeDetectorRef.detectChanges() 来触发更改检测,还是我遗漏了什么?

编辑

为了清楚起见,我在 HTML 元素上相应地使用 this.isLoading 到 show/hide 通过 adding/removing class 加载状态。例如,

<div [class.processing]="isLoading"></div>

将 ChangeDetectionStrategy 设置为 OnPush 时,更改检测将 运行 仅在输入发生更改时进行。由于您正在订阅一个可观察对象并更改一个局部变量,因此 angular 不会收到此更改的通知,因此您必须自己让它知道。 推荐的方法是使用 ChangeDetectorRef.markForCheck() ,它将在组件

上方的树枝上执行变化检测

在此great thoughtram article

中有更多关于此的更多信息

而且优秀presentation here by Pascal Precht