Firebase Angularfire2 - 收听查询列表中的孩子

时间:2017-01-18 13:47:23

标签: angular firebase firebase-realtime-database rxjs angularfire2

我想知道是否可以在查询列表中使用“child_added”事件。像这样:

this.curUserPosts = this.af.database.list('/posts', {
    query: {
      orderByChild: 'user/id',
      equalTo: id
    }
  }).$ref.on("child_added", (child) => {
     console.log(child);
  });

我对以下内容感兴趣: 它会起作用吗?仅当添加的子对应于查询时才会正常触发。性能如何。

此外,在firebase中处理此类查询列表的首选方法是什么?

2 个答案:

答案 0 :(得分:3)

不,它不起作用;它不会应用查询。

ref$的{​​{1}}属性不是用于配置查询的引用。您可以在source code中看到这一点(构造函数的FirebaseListObservable参数已分配给ref属性):

$ref

但是,如果您想自己使用return new FirebaseListObservable(ref, subscriber => { ... let queried: firebase.database.Query = ref; if (query.orderByChild) { queried = queried.orderByChild(query.orderByChild); } else if (query.orderByKey) { queried = queried.orderByKey(); } else if (query.orderByPriority) { queried = queried.orderByPriority(); } else if (query.orderByValue) { queried = queried.orderByValue(); } ,可以撰写自己的查询:

child_added

请注意,在您的代码中,通过调用this.curUserPosts = this.af.database.list('/posts', { query: { orderByChild: 'user/id', equalTo: id } }); this.curUserPosts.$ref .orderByChild('user/id') .equalTo(id) .on("child_added", (child) => { console.log(child); }); 上的on,您的$ref属性将被分配给observable以外的其他内容;它将被分配给您传递给this.curUserPosts的听众。

答案 1 :(得分:-1)

是的,这适用于列表的所有初始项目。

为所有初始项目调用child_added后,对于将要调用的所有未来项目child_added将被调用,但它不再被排序。