【发布时间】:2019-05-16 10:09:29
【问题描述】:
我正在重写一个 Ionic 项目以使用 ngrx,因为它正在大量增长,我需要保持集中状态。
我已经用 ngrx 实现了它,并在 Normalizr 的帮助下使用了标准化状态。
现在我对如何将填充对象传递给哑组件有疑问:
假设我有两个接口:
interface Conversation {
date: Date,
lastMessage: string //this is the id of a message entity coming from normalizr
}
和
interface Message {
content: string
}
现在,当我尝试将所有对话传递给哑组件时,我正在使用这样的选择器:
getConversations() {
//select all the conversations to have a shape of Conversation[]
let conversations$ = this.store.select(state => Object.keys(state.entities.conversations).map( (id:string) => state.entities.conversations[id] ));
//select all the messages in a shape { [id:string] : Message }
let messages$ = this.store.select(state => state.entities.messages);
return Observable.combineLatest(
conversations$,
messages$,
(conversations, messages) => {
return conversations.map(conversation => {
return { ...conversation, lastMessage: messages[conversation.lastMessage] }
});
}
)
}
但是我返回的 Observable 不是 Conversation[] 数组,因为
return { ...conversation, lastMessage: messages[conversation.lastMessage] }
在 'lastMessage' 中放入 Message 类型的对象而不是 String。
我尝试使用对象类型的接口而不是字符串
interface Conversation {
date: Date,
lastMessage: Message
}
但是我不能使用像
这样的选择器this.store.select(state => state.entities.messages[conversation.lastMessage]
因为它不再是字符串了。
我怎样才能做到这一点?
谢谢
【问题讨论】: