如何像我们可以在SQL中那样在firebase实时数据库中实现分页?

时间:2019-07-25 11:31:46

标签: firebase firebase-realtime-database pagination

我正在创建一个管理应用程序,它需要列出保存在我的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实时数据库中做什么,如果可以的话怎么办?

谢谢。

1 个答案:

答案 0 :(得分:1)

Firebase的查询模型基于锚,而不基于偏移。因此,它不太适合随机访问分页,而更适合于无限滚动类型的延迟加载。

要加载页面,您需要知道该页面的第一项还是最后一项的密钥。无法通过偏移量跳到页面,您将必须知道其中一个键。

(早已不推荐使用)firebase-utils库通过首先通过REST API加载所有键(允许加载键而不加载其值)来实现分页,然后使用该键查找每个页面的开始和结束。但这意味着您会错过实时更新,这在使用Firebase时感觉有点浪费。