Angularfire - Как применить условия «где» с snapshotChanges () - PullRequest
0 голосов
/ 13 марта 2020

Я довольно новичок в angular & firebase и текущем, используя angular / fire, чтобы получить коллекции с условием, как указано ниже в сервисе;

service.ts

get posts() {
  return this.afs
          .collection<Todo>('posts', ref => {
            let query:
              | firebase.firestore.CollectionReference
              | firebase.firestore.Query = ref;

            query = query.where('posted', '==', true);

            return query;
          })
          .snapshotChanges()
          .pipe(
            map(action =>
              action.map(a => {
                const data = a.payload.doc.data();
                const id = a.payload.doc.id;
                return { id, ...data };
              }),
            ),
          );
}

В компоненте, на который я подписываюсь, наблюдаемая для извлечения сообщений с полем «опубликовано» равно true . Ниже работает как ожидалось, и только "опубликованные" сообщения регистрируются.

component.ts

ngOnInit() {
    this.service.posts.subscribe(posts => {
      console.log(posts);
    })
}

Но при добавлении поста с полем «опубликовано» равняется false , это сообщение также регистрируясь в консоли.

Частично это имеет смысл для меня, так как коллекция обновляется и компонент подписывается на нее, что приводит к обновлению.

Однако мои ожидания были событием, если коллекции изменились, это все еще будут применены условия и снова отфильтрованы.

Спасибо всем за помощь новичку ie

1 Ответ

0 голосов
/ 13 марта 2020

Я не очень хорошо знаю angularfire2 и firebase, но вы можете воспользоваться оператором map и оператором filter массива.

Попробуйте:

ngOnInit() {
    this.service.posts.pipe(
      map(posts => posts.filter(post => post.posted)),
    ).subscribe(posts => {
      console.log(posts);
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...