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

Dan*_*nov 6 rxjs firebase firebase-realtime-database angularfire2 angular

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

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

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

而且,在firebase中处理这些查询列表的首选方法是什么?

car*_*ant 3

不,这是行不通的;它不会应用查询。

ref$的属性不会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();
  }
Run Code Online (Sandbox Code Playgroud)

但是,如果您想使用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);
  });
Run Code Online (Sandbox Code Playgroud)

请注意,在您的代码中,通过调用on$ref您的this.curUserPosts属性将被分配可观察值以外的其他内容;它将被分配给您传递给的侦听器on