Javascript RxJS:如何在多个行为主题源之间切换
场景: 我有一个网格,我想在其中显示数据。我可能有两个(或更多)行为主题数据源。我还有一个toggle observable,它返回一个数字,指示我要从哪个源显示数据(即1表示源1,2表示源2,等等) 问题: 我如何组合n个源,但只从源中发出切换可观察的记录?我的网格将订阅生成的可观测数据。当toggle observable发出时,我希望从所选源发出最新的信号Javascript RxJS:如何在多个行为主题源之间切换,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,场景: 我有一个网格,我想在其中显示数据。我可能有两个(或更多)行为主题数据源。我还有一个toggle observable,它返回一个数字,指示我要从哪个源显示数据(即1表示源1,2表示源2,等等) 问题: 我如何组合n个源,但只从源中发出切换可观察的记录?我的网格将订阅生成的可观测数据。当toggle observable发出时,我希望从所选源发出最新的信号 // Sources let source1 = new BehaviorSubject([]); let source2 = new
// Sources
let source1 = new BehaviorSubject([]);
let source2 = new BehaviorSubject([]);
// Toggle observable
let toggle = new BehaviorSubject(1); // default to source one
// Combined observable
let gridDataSource = ????
我认为
switchMap
可以实现这一点。根据定义,其目的是在多个源之间切换
// Sources
let sources = [
new BehaviorSubject([]),
new BehaviorSubject([]),
];
// Toggle observable
let toggle = new BehaviorSubject(0); // default to the first source
// Selected observable
let gridDataSource = toggle.switchMap((i) => source[i]);
如果不能或不想使用源数组,可以回退到switchMap声明中的一个简单开关案例
let gridDataSource = toggle.switchMap((i) => {
switch(i) {
case 1: return source1;
case 2: return source2;
}
});
如果您不需要发出初始值,请尝试
com-binelate-est
或与Lat-est-From
。如果顺序很重要,则使用concatMap
,如果不重要,则使用mergeMap
、switchMap
或flatMap
我确实需要一个初始值,但我不确定您所说的顺序是什么意思。我只想从其中一个源发射,具体取决于选择的源。基本上,网格旁边会有一个源下拉选择器。你不能创建一个单独的b.subject,然后再订阅它,而不是创建许多b.subject。因为一个子项目的所有子描述者共享该子项目的相同执行。在您的下拉选择器上,您可以通过添加值。next()
能够非常快速地实现这一点,而不会出现任何问题,并且它的行为完全符合我的期望。谢谢