相关疑难解决方法(0)

如何按单个页面对 Firestore 数据集进行分页?

我想按 20 个项目的页面对存储在 Firebase 中的论坛帖子进行分页,如下所示:

  • 用户访问 foo.com/1 --> 加载最近 20 个帖子
  • 用户访问 foo.com/2 --> 加载帖子 21-40

等等。

现在我知道我可以使用查询游标(如此处所述,这对于无限滚动来说效果非常好,因为我从页面 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)

javascript firebase google-cloud-firestore

7
推荐指数
1
解决办法
2101
查看次数

如何在Angular(6)和Firebase Firestore设置中分页回到上一页

在将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

5
推荐指数
1
解决办法
837
查看次数