Как убедиться, что локальный массив всегда содержит последние данные в приложении Angular? - PullRequest
0 голосов
/ 17 апреля 2020

В моем приложении 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()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...