我正在根据品牌过滤产品。我可以获取最后一项的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()
...
})
答案 0 :(得分:1)
您使用的是orderByChild().startAt()
过滤器,这意味着Firebase根据您指定的属性对结果进行排序,然后开始从您指定的节点返回结果。由于您未指定任何结束条件,因此它将一直返回结果,直到到达列表末尾为止。
如果只想让其brand
值与您在startAt()
中指定的值相匹配的子节点,则还应包括一个endAt()
条件。
类似的东西:
firebase.database().ref('products').orderByChild('brand')
.startAt(brand, lastKey)
.endAt(brand+'\uf8ff')
.limitToFirst(31)
\uf8ff
只是最后一个可打印的Unicode字符,这意味着列表在该品牌之后停止。