Firestore + AngularFire如何分页到上一页

时间:2019-01-07 12:06:55

标签: angular firebase pagination 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;

所以:

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

但是:

query = query.endBefore(endBefore)并没有在该文档之前终止,我认为它已经达到了极限。

2 个答案:

答案 0 :(得分:3)

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

假设您有这个数组,并且您正在短路上升

A,
B, 
C,
D,
E,
F, 

您的页面限制为2个结果

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

E,
F

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

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

答案 1 :(得分:2)

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);
}