懒加载Firebase

时间:2017-07-13 12:53:31

标签: angular firebase firebase-realtime-database lazy-loading angularfire2

我正在Angular 4中创建一个聊天应用程序,用于在Firebase数据库中存储和读取消息。

我编写了一个查询,只检索该特定会话的最新10条消息。

this.messages = this.db.list('messages/' + conversationId, { query: { limitToLast: 10 } });

db:AngularFireDatabase,消息:FirebaseListObservable

现在我想在somene按下“更多”按钮(或滚动到顶部)时检索10条较旧的消息,而我在编写查询时遇到了困难。

这就是我的尝试:

this.messages = this.db.list('messages/' + conversationId, { query: { orderbyChild: 'id', startAt: start, limitToLast: 10 } });

'start'这里是一个像'-KovtCl4hEUPR2LfQfpc'这样的id,它是this.messages FirebaseListObservable中最旧的消息的id。我还尝试将此ID作为字符串手动传递给执行上述查询的方法。

尝试按照此处所述进行操作:

  1. https://stackoverflow.com/a/43969460/5437768
  2. https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query
  3. https://firebase.google.com/docs/database/web/lists-of-data#filtering_data
  4. 最后一个查询给出了0个结果。

    Firebase布局

    /消息/的conversationId / MESSAGEID / {消息}

    "messages": {
        "-k32b": {
            "-kT3d": {
                "content": "Hello World!",
                "id" : "-kT3d"
            },
            "-kT4c": {
                "content": "How are you World?",
                "id" : "-kT4c"
            }
        }
    }
    

    我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

考虑使用" endat"同样。

有关详细说明,请查看this tutorial

PS我正打电话,我稍后会重新格式化。

答案 1 :(得分:0)

事实证明它不起作用,因为查询中有拼写错误(' orderbyChild'而不是' orderByChild')。感谢Firebase在这里没有给我任何错误:p

我现在确实在方法链中一起使用.orderByChild(),. endAt()和.limitToLast()。这可以确保查询条件以正确的顺序执行,而在查询对象中查询它似乎没有特别的顺序执行这些条件。