我想按 20 个项目的页面对存储在 Firebase 中的论坛帖子进行分页,如下所示:
等等。
现在我知道我可以使用查询游标(如此处所述),这对于无限滚动来说效果非常好,因为我从页面 1->2->3 等开始,每次我都有最后一个可见的我的方法中可供参考的文档.startAfter(lastVisible)。
但是,如果我希望用户能够访问第 13 页直接查看帖子 241-260,该怎么办?有没有办法从页面文档 241 开始,而不需要先进行(多个)查询来获取 lastVisible 文档?
添加:
这可能非常糟糕,因此在执行以下操作时要小心。我找到了以下方法来“解决”这个问题:
const pageNo = 1 /* variable */
const postsPerPage = 20
const baseRef = fireDb.collection("posts")
let currentPageRef
if (pageNo === 1) {
currentPageRef = baseRef.limit(postsPerPage)
} else {
let lastVisibleRef = baseRef.limit((pageNo-1) * postsPerPage)
const lastVisibleQuerySnapshot = await lastVisibleRef.get()
const lastVisiblePost = lastVisibleQuerySnapshot.docs[lastVisibleQuerySnapshot.docs.length-1]
currentPageRef = baseRef.startAfter(lastVisiblePost).limit(postsPerPage) …Run Code Online (Sandbox Code Playgroud) 在将Angular与Cloud Firestore(Firebase)结合使用时,似乎有很多示例,教程和视频,以及如何分页到下一页。
但是经过大量搜索后,我找不到找到前一页的方法。我得到的最远的就是返回第一页。
这是我的服务现在的外观:
import { Injectable } from '@angular/core';
import { AngularFirestore } from 'angularfire2/firestore';
import { BehaviorSubject, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Task } from './task.model';
@Injectable()
export class TaskService {
private _data: BehaviorSubject<Task[]>;
public data: Observable<Task[]>;
firstEntry: any;
latestEntry: any;
constructor(private afs: AngularFirestore) { }
public first() {
this._data = new BehaviorSubject([]);
this.data = this._data.asObservable();
const tasksRef = this.getCollection('tasks', ref => ref.orderBy('createdAt').limit(5))
.subscribe(data => {
this.firstEntry = data[0].doc;
this.latestEntry = …Run Code Online (Sandbox Code Playgroud)pagination firebase firebase-realtime-database angular google-cloud-firestore