我有一个由用户动态创建的对象列表。每个对象都有一个click$
可观察的对象,我想将所有这些click$
流合并到一个流中。
我已经尝试了从merge
导入的rxjs
静态运算符。直接引用流:
sub = merge(list[0].click$, list[1].click$)
.subscribe(e => {
console.log('My click event', e);
})
一切都按预期进行。
但是当我在下一个订阅呼叫中使用click$
数组时,我收到的是Observable
对象,而不是我的点击事件。
const streams= [];
list.forEach(o => { streams.push(o.click$); });
sub = merge(streams).subscribe(e => {
console.log(e); // e is an observable ???
});
为什么?我在做什么错了?
这里有一个类似的实现,但有相同的错误:https://stackblitz.com/edit/typescript-ohq6rx?file=index.ts&devtoolsheight=100
答案 0 :(得分:1)
因为它是一个数组。您可以使用JavaScript中的...
运算符来扩展数组。如果您这样做,那么一切都应该很好。
更多信息,请访问MDN
我添加了代码,因此您对我的意思有所了解。列表是具有click$
属性的对象的数组。该数组仅映射到click$
,然后通过...
运算符进行传播。
sub = merge(...list.map(item => item.click$)).subscribe(console.log)