firebase - 如何按 Firestore 中的项目数分页或无限滚动?
问题描述
要求
- 开始时将加载 20 个项目。
- 当用户滚动到结束时,将加载 20 多个项目。
问题
Firestore 查询具有适用于字段值的startAt()
方法。我想在索引上工作。endAt()
OrderBy
interface Product{
price:number;
}
假设有 100 个 20 美元的产品和 30 个 10 美元的产品。可以获取第一个负载
query
.orderBy(price,desc)
.limitTo(20)
现在最后一件商品的价格是 20 美元。加载接下来的 20 个结果
query
.orderBy(price,desc)
.startAt(20$)
.limitTo(20)
它将返回相同的结果。
解决方案
您应该“使用文档快照来定义查询光标”,如此处文档中所述:https ://firebase.google.com/docs/firestore/query-data/query-cursors#use_a_document_snapshot_to_define_the_query_cursor
因此,您将执行以下操作:
var first = db.collection("....").orderBy("price", "desc").limit(20);
return first.get().then(function (documentSnapshots) {
// Get the last visible document
var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length-1];
console.log("last", lastVisible);
// Construct a new query starting at this document,
// Get the next 20 cities.
var next = db.collection("....")
.orderBy("price", "desc")
.startAfter(lastVisible)
.limit(20);
});
推荐阅读
- android - 从最近的应用列表中删除应用时,Oreo 中未发送通知
- angular - 对 Angular 5 路线的怀疑
- c - 我不能在 Clion 中使用 getline
- google-apps-script - 删除某些其他字符之间出现的某些字符
- linux - QUdpSocket 读取 - 使用 tcpdump 观察到的数据报偶尔丢失
- javascript - IONIC1 中的菜单未关闭
- angular - Angular 5:@HostListener('click') 内存泄漏?
- c - 在 char 类型变量中声明了“a”,但“b”作为输出出现,这是怎么回事?
- windows - 为什么我的浏览器显示我从未选择过的语言
- tsql - 如何将查询从 cognos sql 转换为 t-sql