Angularfire-如何使用snapshotChanges()应用“ where”条件

时间:2020-03-13 16:55:35

标签: javascript angular firebase google-cloud-firestore angularfire2

我对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 的帖子时,该帖子也会被记录在控制台中。

从某种程度上来说,这对我来说很有意义,因为集合已更新且组件已订阅,从而导致更新。

但是,我的期望是,如果集合发生了变化,它将仍然适用条件并再次过滤掉。

谢谢大家帮助新手

1 个答案:

答案 0 :(得分:0)

我不太了解angularfire2firebase,但是您可以利用数组的map运算符和filter运算符。

尝试:

ngOnInit() {
    this.service.posts.pipe(
      map(posts => posts.filter(post => post.posted)),
    ).subscribe(posts => {
      console.log(posts);
    })
}