Angular Observable退订在哪里?

时间:2018-11-21 15:38:53

标签: angular observable

我不确定应该在哪里取消订阅Observable。

我在组件中具有以下功能:

  loadProjectDetails(projectId: number): void {

console.log('>> loadProjectDetails(), id=', projectId);

const subscription = this.projectService.getProjectById(projectId).subscribe(
  data => {

    this.component = ProjectComponent;
    this.injector = Injector.create([{provide: Project, useValue: data}], this.inj);
    this.localStorageService.setLastSelection(projectId, null, null);
    subscription.unsubscribe();

  }, error => {

    if (error.status === 400) {
      alert("There is no project with id=" + projectId);
    } else {
      throw error;
    }
    subscription.unsubscribe();

  }
);
}

以提出的方式退订是否有意义,或者使用 ngOnDestroy()方法退订是否足够?

loadProjectDetails(projectId:number)方法会在用户每次按下按钮时触发,因此它会运行多次,直到组件被销毁。

2 个答案:

答案 0 :(得分:1)

您不应90%地手动退订。在这种情况下,您正在使用服务来获取数据。如果此服务使用http调用(因此使用HttpClient),则在调用完成后,已关闭可观察对象,并且已取消订阅已关闭的可观察对象。如果不是这种情况,则只需要第一个元素,然后使用firsttake(1)

答案 1 :(得分:0)

对于大多数组件而言,退订ngOnDestroy绰绰有余。但是,如果您仅需要特定对象的可观察对象,并且可以在使用寿命长的组件中仅使用一次,则可以使用必须节省资源的解决方案,但是对于一个可观察对象来说,影响不大< / p>