Firestore + AngularFire如何分页到上一页

Jim*_*ane 3 pagination firebase angular google-cloud-firestore

抱歉,我已经多次以不同的方式问过这个问题,例如:

但是,没有一个答案能真正说明解决方案或可以理解。

我也浏览了很多教程,例如:

详细说明:

所以这是我到目前为止所做的

let query = ref.orderBy(orderBy, asc ? 'asc' : 'desc').limit(limit);
        if (startAfter) {
          // Thiis works as it should
          query = query.startAfter(startAfter);
        }
        if (endBefore) {
          // This here does not work or give the correct results. I get the first page. 
          query = query.endBefore(endBefore);
        }
        return query;
Run Code Online (Sandbox Code Playgroud)

所以:

query = query.startAfter(startAfter); 可以正常工作。

然而:

query = query.endBefore(endBefore) 在该文件之前没有结束,我认为它已经达到了极限。

Jef*_*D23 22

由于firebase@7.3.0您可以使用该Query.limitToLast(n: number)方法 - 使用分页数据向后移动变得更加容易。

您的实现细节可能如下所示:

function nextPage(last) {
   return ref.orderBy('age').startAfter(last.age).limit(3);
}

function prevPage(first) {
   return ref.orderBy('age').endBefore(first.age).limitToLast(3);
}
Run Code Online (Sandbox Code Playgroud)

  • 无需更改,我只是想确保该选项显示在此处,因为它是 SDK 中的全新功能。仅适用于 7.3 或更高版本的应用程序。 (2认同)

Jim*_*ane 7

所以我认为我是通过受上述github问题启发的评论解决了这个问题:

假设您有这个数组并且您正在升序排序

A,
B, 
C,
D,
E,
F, 
Run Code Online (Sandbox Code Playgroud)

您有2个结果的页面限制

然后,当您进入第三页时,

E,
F
Run Code Online (Sandbox Code Playgroud)

现在您需要转到上一页,您需要做的是:

  1. 反转排序顺序,我们的数据应为 [F,E,D,C,B,A]
  2. 在当前查看页面的第一个文档之后开始(在我们的示例中为E)
  3. 查询消防站以获取结果(例如,限制为2)。您应该获得相反的顺序并在之后开始E ,那就是[D,C]
  4. 反转上面的数组,它将是 [C,D]
  5. 完成了

  • 可行,但荒谬。Firestore必须做得更好。 (4认同)
  • 谢谢你的主意。我正在努力实现这一目标。 (2认同)