【问题标题】:Firebase Angularfire2 - listening on queried list child addedFirebase Angularfire2 - 监听查询列表子添加
【发布时间】:2017-01-19 07:22:29
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    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 属性将被分配除可观察对象之外的其他内容;它将分配给您传递给on 的侦听器。

    【讨论】:

      【解决方案2】:

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

      一旦为所有初始项目调用 child_added,那么对于以后添加的每个项目,child_added 将被调用,但不再排序。

      【讨论】:

        猜你喜欢
        • 2017-06-05
        • 1970-01-01
        • 2018-11-15
        • 2017-06-28
        • 1970-01-01
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多