【发布时间】:2025-12-23 08:10:11
【问题描述】:
我有一个包含项目列表的组件,其中,在每个项目中,一个按钮允许用户删除所述项目。
单击delete 按钮后,将打开一个模式,确认是否要删除该项目。单击delete 按钮时,会触发以下函数:
public removeSite(site: site): void {
this.deleteSiteModal.open(site);
site.siteDeletion = true;
this._subscriptions.push(this.deleteSiteModal.siteToDelete.subscribe((siteToDelete) => {
if (siteToDelete) {
this._subscriptions.push(this.myService.deleteSite(siteToDelete.guid).subscribe(sites => {
}
}));
}
最终发生的情况是,每次单击此按钮时,都会发生多个订阅,从而导致发送多个请求。一个项目将被删除,然后它会尝试再次删除相同的项目,但由于找不到它而失败。
我的同事提到我应该在我的组件之外订阅一次siteToDelete,并且只在单击按钮时执行操作。
对此有何想法或解决方法?
谢谢
【问题讨论】:
-
当用户确认删除时,
this.deleteSiteModal.siteToDelete会发出吗?为什么要对siteToDelete进行真实检查?你在订阅myService.deleteSite做些什么吗? -
是的。不完全确定(该组件已被多个开发人员修改)。实际删除站点的其余逻辑都在那里,但我只是决定暂时将其保留(它只是数组上的过滤器)。
-
当模态关闭时您是否取消订阅?
-
我在我的
ngOnDestroy取消订阅 -
父组件的ngOnDestroy还是modal?如果您在模态关闭时没有取消订阅,那么您的订阅将会增加(每次调用
removeSite时都会增加 1),并且您会收到越来越多的删除 api 调用。