Как подписаться только на изменения коллекции Firebase - PullRequest
0 голосов
/ 20 февраля 2019

Я использую firebase javascript sdk через @angular/fire в угловом приложении.

Используя angularfire Collection#stateChanges(), я думал, что просто подписаться на изменения состояния коллекции (на основании описания).Т.е. при первоначальной подписке ничего не будет возвращено.Однако я обнаружил, что stateChanges () немедленно возвращает все в коллекции, а затем продолжает возвращать изменения состояния.

Есть ли способ просто подписаться на будущие изменения состояния, а не "воспроизвести "прошлые изменения (либо с помощью firebase-js-sdk напрямую, либо с помощью @angular/fire)?

Например, если у вас уже есть копия текущего состояния загруженной коллекции, вы не захотите повторнозагружать состояние коллекции при простой подписке на обновления коллекции.

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

В настоящее время Firebase не поддерживает только подписку на изменения запроса.Когда вы подписываетесь на запрос, вы также должны немедленно загрузить все соответствующие документы (см. Вопрос # 1551 в репозитории firebase-js-sdk).

Как говорится, как указаноВ этом выпуске вы можете подделать эту функцию, добавив свойство updatedAt к своим документам и запросив все документы, где updatedAt > now.Это позволит подписаться только на будущие изменения.

Ограничением этого обходного пути является то, что Firestore поддерживает использование фильтра неравенства (>=, < и т. Д.) Только для одного поля в запросе, поэтомуиспользование фильтра неравенства в поле updatedAt может быть проблематичным.

0 голосов
/ 20 февраля 2019

Возможно, вам понадобится метод stateChanges для коллекций.Из документов:

Зачем вы это используете?- Вышеуказанные методы возвращают синхронизированный массив, отсортированный в порядке запросов.stateChanges () генерирует изменения по мере их возникновения, а не синхронизирует порядок запросов.Это хорошо работает для интеграций ngrx, так как вы можете создать свою собственную структуру данных в ваших методах редуктора.

И пример кода с использованием @angular/fire:

this.angularFirestore
  .collection('my-collection')
  .stateChanges(['added', 'removed', updated']) // double check the state change references, these were assumed
  .pipe(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...