【问题标题】:Async pipe to unsubscribe from ReplaySubject从 ReplaySubject 取消订阅的异步管道
【发布时间】:2017-05-16 09:13:47
【问题描述】:

我有以下服务来适应我的应用中的全局微调器:

import {
  Injectable
} from '@angular/core';
import {
  Observable
} from 'rxjs/Observable';
import {
  ReplaySubject
} from 'rxjs/ReplaySubject';

@Injectable()
export class SpinnerService {
  private visible = new ReplaySubject < boolean > ();

  showSpinner() {
    this.visible.next(true);
  }

  hideSpinner() {
    this.visible.next(false);
  }

  getSpinnerVisibility(): Observable < boolean > {
    return this.visible.asObservable();
  }
}

然后在我的主应用程序组件中的router-outlet 上方:

&lt;app-spinner *ngIf="spinnerService.getSpinnerVisibility() | async "&gt;&lt;/app-spinner&gt;

问题是,这里的async 管道是否应该正常运行以取消订阅而不会从这个ReplaySubject 中泄漏内存,还是我必须手动取消订阅?

【问题讨论】:

  • 异步管道会自动取消订阅。

标签: angular spinner rxjs


【解决方案1】:

从订阅者的角度来看,ReplaySubjectObservable 之间绝对没有区别。当您使用async 管道时,您不必取消订阅可观察对象,因此ReplaySubject 也是如此。

【讨论】:

  • 谢谢。奇怪的是,目前当我从另一个组件使用我的服务时,微调器没有按预期显示!
  • 如何在模块或组件中声明服务?
  • 在我的 AppModule 的 providers 数组中;但我从另一个模块中的组件调用服务,该模块本身导入到我的 AppModule 的 imports 数组中。
猜你喜欢
  • 2019-05-06
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2020-11-13
  • 2021-11-04
  • 1970-01-01
  • 2022-11-27
  • 2019-10-26
相关资源
最近更新 更多