如何使用 AngularFire、Firestore 和 Firebase 分页到上一页
How to paginate to previous page using AngularFire, Firestore and Firebase
抱歉,我看到这个问题在这里以不同的方式被问过很多次,例如:
- Howto paginate back to previous pages in a Angular(6) and firebase Firestore setup
- How to paginate Firestore dataset by individual page?
但是 NONE 的答案确实解释了解决方案或者是可以理解的。
我还浏览了很多教程,例如:
- https://howtofirebase.com/firebase-data-structures-pagination-96c16ffdb5ca
- https://rexrainbow.github.io/phaser3-rex-notes/docs/site/firebase-firestore/#paginate
详情:
这是我到目前为止所做的
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)
在那个文件之前没有结束我认为它已经达到了极限。
所以我想我是通过受上述 github 问题启发的评论解决了这个问题:
假设你有这个数组并且你正在升序排序
A,
B,
C,
D,
E,
F,
并且您的页面限制为 2 个结果
然后当你在第三页时你应该
E,
F
现在您需要转到上一页,您需要做的是:
- 颠倒排序顺序,我们的数据应该是
[F,E,D,C,B,A]
- 在当前查看页面的第一个文档之后开始(在我们的例子中是 E)
- 查询 firestore 以获得结果(例如,您的限制为 2)。您应该以相反的顺序获得并在
E
之后开始,即 [D,C]
- 反转上面的数组,所以它将是
[C,D]
- 完成
从 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);
}
抱歉,我看到这个问题在这里以不同的方式被问过很多次,例如:
- Howto paginate back to previous pages in a Angular(6) and firebase Firestore setup
- How to paginate Firestore dataset by individual page?
但是 NONE 的答案确实解释了解决方案或者是可以理解的。
我还浏览了很多教程,例如:
- https://howtofirebase.com/firebase-data-structures-pagination-96c16ffdb5ca
- https://rexrainbow.github.io/phaser3-rex-notes/docs/site/firebase-firestore/#paginate
详情:
这是我到目前为止所做的
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)
在那个文件之前没有结束我认为它已经达到了极限。
所以我想我是通过受上述 github 问题启发的评论解决了这个问题:
假设你有这个数组并且你正在升序排序
A,
B,
C,
D,
E,
F,
并且您的页面限制为 2 个结果
然后当你在第三页时你应该
E,
F
现在您需要转到上一页,您需要做的是:
- 颠倒排序顺序,我们的数据应该是
[F,E,D,C,B,A]
- 在当前查看页面的第一个文档之后开始(在我们的例子中是 E)
- 查询 firestore 以获得结果(例如,您的限制为 2)。您应该以相反的顺序获得并在
E
之后开始,即[D,C]
- 反转上面的数组,所以它将是
[C,D]
- 完成
从 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);
}