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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxJS:如何切换以在多个行为主题源之间切换相关的知识,希望对你有一定的参考价值。

场景:

我有一个网格,我想在其中显示数据。我可能有两个(或更多)行为主题数据源。我还有一个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 = ????
答案

我认为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;
    }
});

以上是关于RxJS:如何切换以在多个行为主题源之间切换的主要内容,如果未能解决你的问题,请参考以下文章

实现侧边导航以在活动之间切换

更改 Ctrl + Tab 行为以在 Visual Studio 中的文档之间移动

iOS 7 键盘主题切换

如何定义键绑定以在 emacs 中的次要模式之间切换?

Reload Activity 以在 Fragment 之间重新切换

如何在不重新启动活动的情况下切换主题(夜间模式)?