В моем приложении Ioni c / Angular объект Conversation
содержит массив объектов Message
.
Я могу добавить Conversations
, нет проблем с использованием приведенного ниже кода , Когда я console.log
this.conversations
, отображаются все Conversations
.
private _conversations = new BehaviorSubject<Conversation[]>([]);
get conversations() {
return this._conversations.asObservable();
}
addConversation(mechanicId: string, message: string) {
let generatedId;
const newConversation = new Conversation(
Math.random().toString(),
[new Message(
Math.random().toString(),
message,
)]
);
return this.http.post<{ name: string }>(
'myUrl/conversations.json',
{ ...newConversation, id: null }
).pipe(
switchMap(resData => {
generatedId = resData.name;
console.log('My Conversations', this.conversations);
return this.conversations;
}),
take(1),
tap(conversations => {
newConversation.id = generatedId;
this._conversations.next(conversations.concat(newConversation));
})
);
}
Однако, когда я пытаюсь обновить Conversation
(т.е. добавить к нему новый Message
), когда я console.log
this.conversations
, я получаю только Conversation
, который я обновляю:
addMessageToConversation(conversationId: string, message: string) {
let updatedConversations: Conversation[];
return this.conversations.pipe(
take(1),
switchMap((conversationToUpdate: any) => {
conversationToUpdate.messages.push(
new Message(
Math.random().toString(),
message,
this.authService.userId,
new Date(Date.now())
)
);
console.log('Conversations after adding new message', this.conversations);
// This only shows the Conversation I am looking @ currently. I want it to have all the latest Conversations & Messages, not just this one
return this.http.put(
`myUrl/conversations/${conversationId}.json`,
{ ...conversationToUpdate, id: null }
);
}), tap(() => {
// this._conversations.next(updatedConversations); // dont't think this is doing what I want it to
})
);
}
Я хочу вернуть все Conversations
, чтобы _conversations
всегда содержал последний Conversations
.
Может кто-нибудь сказать мне, как я могу обеспечить, чтобы _conversations
всегда содержал все Conversations
, а не только тот, чей ID был передан в addMessageToConversation()
?