我不确定应该在哪里取消订阅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)方法会在用户每次按下按钮时触发,因此它会运行多次,直到组件被销毁。
答案 0 :(得分:1)
您不应90%地手动退订。在这种情况下,您正在使用服务来获取数据。如果此服务使用http调用(因此使用HttpClient),则在调用完成后,已关闭可观察对象,并且已取消订阅已关闭的可观察对象。如果不是这种情况,则只需要第一个元素,然后使用first
或take(1)
。
答案 1 :(得分:0)
对于大多数组件而言,退订ngOnDestroy绰绰有余。但是,如果您仅需要特定对象的可观察对象,并且可以在使用寿命长的组件中仅使用一次,则可以使用必须节省资源的解决方案,但是对于一个可观察对象来说,影响不大< / p>