我正在创建一个管理应用程序,它需要列出保存在我的Firebase实时数据库中的产品。由于可能有数百种产品,并且它们无法在单个页面上列出,因此我必须实现分页。我已经找到一种实现分页的方法,如官方文档here中所述。
通过使用 startAt()和 limitToFirst(),我可以在页面中跳转并使用 endAt()和 limitToLast ()我可以在页面上向后跳。这样,我可以在连续的页面之间跳转。例如
第1页<->第2页<->第3页<->第4页
在页面中向前跳转
firebase.db.ref("products")
.orderByKey()
.limitToFirst(pageSize + 1)
.startAt(lastKey)
用于向后跳转页面
firebase.db.ref("products")
.orderByKey()
.limitToLast(pageSize + 1)
.endAt(firstKey)
在上面的代码段中, pageSize 是页面中要显示的产品数量, lastKey 是上一页查询结果中最后一个产品的关键字( (如果是首页,则为空), firstKey 是上一页查询结果中第一个产品的关键字。
但是问题是,如果我必须直接从第1页跳到第3页,那么我找不到实现该目标的方法。这就是我想要的;
第1页<->第3页<->第6页
有人可以指导我在firebase实时数据库中做什么,如果可以的话怎么办?
谢谢。
答案 0 :(得分:1)
Firebase的查询模型基于锚,而不基于偏移。因此,它不太适合随机访问分页,而更适合于无限滚动类型的延迟加载。
要加载页面,您需要知道该页面的第一项还是最后一项的密钥。无法通过偏移量跳到页面,您将必须知道其中一个键。
(早已不推荐使用)firebase-utils
库通过首先通过REST API加载所有键(允许加载键而不加载其值)来实现分页,然后使用该键查找每个页面的开始和结束。但这意味着您会错过实时更新,这在使用Firebase时感觉有点浪费。