Angular中基于两个Observable调用方法的问题求助
解决方案
你的核心需求是仅当siteChanged$触发时,当前选中的tab是Tab.Groups,才调用getGroups(),同时保留原有currentTab$的业务逻辑。可以通过withLatestFrom操作符实现,具体如下:
1. 保留原有currentTab$的订阅
这部分逻辑和siteChanged$无关,是处理tab切换时的历史记录更新与计数发射,直接保留即可:
this.uiService.currentTab$ .pipe(takeUntil(this.disconnect$)) .subscribe(tab => { if (tab !== Tab.Groups) { this.windowService.pushToHistory({ group: this.groupService.selectedGroup?.groupId }, true); } else { this.totalCountChange.emit(this.allGroups.length); this.filteredCountChange.emit(this.filteredGroups.length); } });
2. 修改siteChanged$的订阅逻辑
使用withLatestFrom操作符,在siteChanged$触发时,获取currentTab$的最新值,判断后再执行getGroups():
this.siteService.siteChanged$ .pipe( takeUntil(this.disconnect$), withLatestFrom(this.uiService.currentTab$) // 关联当前最新的tab状态 ) .subscribe(([_, tab]) => { if (tab === Tab.Groups) { this.getGroups(); } });
为什么不用forkJoin?
forkJoin的特性是所有传入的Observable都完成后,才会发射一次组合结果,但你的两个Observable应该是持续发射值的(比如BehaviorSubject),永远不会进入完成状态,所以forkJoin永远不会触发订阅逻辑,完全不适合这个场景。
内容的提问来源于stack exchange,提问作者QueenBee
相关产品推荐
相关产品推荐

