Возвращает ли коллекция $ .valueChanges () только изменения или всю коллекцию? - PullRequest
0 голосов
/ 08 апреля 2020

Мне немного неясно, что на самом деле делает valueChanges - если моя подписка выглядит так:

(Typescript / Angular)

    this.accountsCollection = this.firestore.collection(`budgets/${budgetId}/accounts`);
    this.accounts$ = this.accountsCollection.valueChanges();
    this.accountsSubscription = this.accounts$.subscribe(accountData => {
      AccountsManager.getInstance().loadData(accountData)
    })

Собираюсь ли я получить вся коллекция каждый раз, когда документ коллекции обновляется, добавляется, удаляется и т. д. c, или только документ, который изменился.

Если бы я только хотел увидеть изменения в подписке (добавлены / обновлены / удалены), как можно получить подписку, которая делает это?

1 Ответ

1 голос
/ 08 апреля 2020

Ваш обратный вызов будет получать весь комплект документов каждый раз, когда любой документ будет добавлен, изменен или удален. Набор документов кэшируется в памяти до тех пор, пока слушатель активен, и для него не требуется каждый раз передавать каждый документ - на самом деле по соединению отправляются только дельты.

Я предлагаю прочитать через документация для потокового сбора данных .

В вашем коде, если вы хотите знать, какие документы действительно изменены, valueChanges не поможет вам это различить. Как указано в документации:

Зачем вам это использовать? - Когда вам просто нужен список данных. К результирующему массиву не прикреплено никаких метаданных документа, что упрощает рендеринг в представление.

Вместо этого следует использовать snapshotChanges(). Это даст вам DocumentChangeAction объекты типа, которые вы можете использовать, чтобы сказать вам, какие документы действительно изменились.

...