Firebase实时数据库分页

时间:2020-02-26 14:02:45

标签: javascript firebase firebase-realtime-database pagination filtering

我正在根据品牌过滤产品。我可以获取最后一项的ID,并在点击“加载”按钮后使用它来获取另一个列表。 但是,当某个特定品牌的产品用尽时,也会继续加载其他品牌的产品。

firebase.database().ref('products').orderByChild('brand')
            .startAt(brand, lastKey)
            .limitToFirst(31)
            .once("value", function(snapshot){
                var data = snapshot.val()
                ...
})

我为类别设置了另一种分页设置,并且效果很好。在用尽特定类别的所有产品后立即停止。

firebase.database().ref('products').orderByChild('category/'+type)
                .startAt(type, lastKey)
                .limitToFirst(31)
                .once("value", function(snapshot){
                    var data = snapshot.val()
                    ...
})

我正在考虑如何根据品牌订购商品。品牌持有字符串值时,类别持有对象。 Realtime DB schema

1 个答案:

答案 0 :(得分:1)

您使用的是orderByChild().startAt()过滤器,这意味着Firebase根据您指定的属性对结果进行排序,然后开始从您指定的节点返回结果。由于您未指定任何结束条件,因此它将一直返回结果,直到到达列表末尾为止。

如果只想让其brand值与您在startAt()中指定的值相匹配的子节点,则还应包括一个endAt()条件。

类似的东西:

firebase.database().ref('products').orderByChild('brand')
        .startAt(brand, lastKey)
        .endAt(brand+'\uf8ff')
        .limitToFirst(31)

\uf8ff只是最后一个可打印的Unicode字符,这意味着列表在该品牌之后停止。