场景:
我有一个要在其中显示数据的网格.我可能有两个(或更多)行为主题数据源.我还有一个可观察到的切换开关,该开关返回一个数字,指示我要从哪个源显示数据(即1表示源1,2表示源2等).
题:
如何合并n个来源,但仅从源中发出记录(如可观察到的切换所示)?我的网格将被订阅到结果可观察对象.触发可观察到的切换时,我希望会发出来自选定源的最新信息.
// 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声明中的简单switch-case.
let gridDataSource = toggle.switchMap((i) => {
switch(i) {
case 1: return source1;
case 2: return source2;
}
});