2
我有一个订阅消息流的沙箱,我想过滤该流以查找已使用另一个组件中指定的路由参数发送或接收来自特定用户的消息。RxJS可观察的合并角
messages.sandbox.ts:
messages$: Observable<Array<Message>> = this.store.select(state => state.data.messages);
fetchReceived(id: string): Observable<Array<Message>> {
return this.messages$.map((messages: any) => {
return messages.filter((message: Message) => {
return message.recipientId == id;
});
});
}
fetchSent(id: string): Observable<Array<Message>> {
return this.messages$.map((messages: any) => {
return messages.filter((message: Message) => {
return message.userId == id;
})
})
}
messages.detail.container.ts
sentMessages$ = new Observable<Array<Message>>();
receivedMessages$ = new Observable<Array<Message>>();
matchingMessages$ = new Observable<Array<Message>>();
ngOnInit() {
this.route.params.subscribe((params: Params) => {
this.sentMessages$ = this.sb.fetchReceived(params['id']);
this.receivedMessages$ = this.sb.fetchSent(params['id']);
this.matchingMessages$ = Observable.merge(this.sentMessages$, this.receivedMessages$);
});
}
this.matchingMessages $似乎只包括this.receivedMessages $但是我知道this.sentMessages $不是null,因为我可以在模板中使用它而不会出现问题。
我错过了什么与合并Observables?创建一个单独的fetchMessages方法会更好吗?它可以筛选出等于路径参数ID的userId或recipientId?如果是的话,我会怎么做呢?
谢谢!
感谢布兰登!两者的答案和解释。我是Rxjs的新手。现在我将最终使用第二种解决方案,因为它可以更好地匹配沙盒其他部分的代码模式 –