【发布时间】:2018-08-08 21:02:25
【问题描述】:
场景:
我有一个要在其中显示数据的网格。我可能有两个(或更多)行为主体数据源。我还有一个可观察的切换开关,它返回一个数字,指示我想从哪个源显示数据(即 1 表示源 1,2 表示源 2,等等)。
问题:
如何组合 n 个源,但仅从可观察到的切换指示的源发出记录?我的网格将订阅生成的 observable。当切换 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 = ????
【问题讨论】:
-
如果您不需要发出初始值,请尝试
combineLatest或withLatestFrom。如果顺序很重要,则使用concatMap,如果不是,则使用mergeMap、switchMap或flatMap -
我确实需要一个初始值,但我不确定您所说的顺序是什么意思。我只想从其中一个来源发出,具体取决于选择哪一个。本质上,网格旁边会有一个源下拉选择器。
-
不是创建许多b.subjects,你不能创建一个,然后你可以订阅它。因为一个主题的所有订阅者共享该主题的相同执行。在您的下拉选择器中,您可以通过
.next()添加值
标签: javascript angular typescript rxjs