Firebase Angularfire2 - 监听查询列表 child 添加

Firebase Angularfire2 - listening on queried list child added

我想知道是否可以对查询列表使用 "child_added" 事件。像这样:

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

我对这里的以下内容感兴趣: 它会起作用吗?只有当添加 child 对应于查询时,它才会正确触发。它的性能如何。

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

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

一旦为所有初始项目调用 child_added,那么对于每个未来添加的项目,都会调用 child_added,但不会再对其进行排序。

不行,不行;它不会应用查询。

FirebaseListObservableref$ 属性 将不是配置查询的引用。你可以在source code中看到这一点(构造函数的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);
  });

请注意,在您的代码中,通过在 $ref 上调用 on,您的 this.curUserPosts 属性 将被分配一些不同于 observable 的东西;它将分配给您传递给 on.

的侦听器