RxJS:如何切换以在多个行为主题源之间切换

问题描述 投票:3回答:1

场景:

我有一个网格,我想在其中显示数据。我可能有两个(或更多)行为主题数据源。我还有一个toggle observable,它返回一个数字,表示我想要显示哪个数据源(即1表示源1,2表示源2等)。

题:

如何组合n个源但仅从源可以发出记录,如切换可观察到的那样?我的网格将订阅生成的observable。当切换观察器发出时,我希望发出所选源的最新信息。

// Sources
let source1 = new BehaviorSubject([]);
let source2 = new BehaviorSubject([]);

// Toggle observable
let toggle = new BehaviorSubject(1); // default to source one

// Combined observable
let gridDataSource = ????
javascript angular typescript rxjs
1个回答
4
投票

我认为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;
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.