我目前是Angular的新手。
异步管道的主要目标之一是自动为您处理订阅和取消订阅。
1.当处理删除或更新(两者都是API服务)时,我是否需要通过ngOnDestroy取消订阅?
projects$: Observable<Project[]>;
constructor(
private projectService: ProjectService,
) { }
ngOnInit() {
this.loadProject();
}
loadProject(){
this.projects$ = this.projectService.getProjects()
.pipe(
map(result => {
if(result.success){
return result.data;
}
})
);
}
deleteProject(){
if(this.projectToDelete){
const id = this.projectToDelete.id;
this.projectService.deleteProject(id).subscribe(result => {
if(result.success){
this.loadProject();
}
});
}
}
是否有另一种方法可以从可观察中删除特定元素,而无需再次调用刷新项目$
的api?类似于这样,而不是上面的:
//In this case this.projects type is not an Observable.
deleteProject(){
if(this.projectToDelete){
const id = this.projectToDelete.id;
this.projectService.deleteProject(id)
.subscribe(result => {
if(result.success){
this.projects = this.projects.filter(item => {
return item.id != id;
});
this.projectToDelete = null;
this.closeModal();
}
});
}
}
这确实取决于您的要求,但您始终可以使用async
管道,它将通过订阅
和取消订阅
来为您处理可观察对象的生命周期
-您可以使用一些RxJS运算符来为您处理取消订阅
。像取(1)
、first()
、of()
、from()
。
-取消订阅NgDestroy正如你所提到的
此外,销毁对于可观察性来说不是一件事,您可以取消订阅
、完成
或两者兼而有之。
响应式编程中的FYI最好采用声明式方法
等等,那是什么?
testObject$ = this.http.get(url).pipe(
map((resp: any) =>
({
id: resp.data.id,
view: resp.data.view,
resourceName: resp.data.resourcename,
loadCapacity: resp.data.loadcapacity
}) as TestObject)
);
}
你看到我做了什么吗?我删除了方法。
然后在您的组件中,您将其称为testService. testObject$
你看到我做了什么,我摆脱了这种方法,原因如下: