【发布时间】:2017-09-02 22:38:54
【问题描述】:
我有一个订阅消息流的沙箱,我想过滤该流以查找使用另一个组件中指定的路由参数发送给特定用户或从特定用户接收的消息。
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$ 不为空,因为我可以在模板中毫无问题地使用它。
我在合并 Observables 时遗漏了什么吗?创建一个单独的 fetchMessages 方法来过滤 userId 或 recipientId 等于路由参数 id 会更好吗?如果是这样,我会怎么做?
谢谢!!
【问题讨论】:
标签: javascript angular rxjs observable