首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AngularFire2分页

使用AngularFire2分页
EN

Stack Overflow用户
提问于 2016-09-28 08:43:36
回答 3查看 4K关注 0票数 0

我正在构建一个Ionic2项目,它使用Firebase,我正在使用AngularFire2。

从AngularFire2文档中,我可以得到如下内容:

代码语言:javascript
复制
const queryObservable = af.database.list('/items', {
  query: {
    orderByChild: 'size',
    equalTo: subject 
  }
});

这个效果很好。我有大约300-400张记录,但我不能在一个API调用中将其全部提取出来。所以我正在尝试实现分页。我试过很多东西。我想实现的是

代码语言:javascript
复制
StartAt(), endAt()

我试图通过查询对象传递它,但是它没有工作。AngularFire2有这样的实现吗?如果不是,我如何获得Firebase ref,以便我可以编写自己的实现?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-29 06:03:12

AngularFire2确实支持startAtendAt,根据他们的源代码。下面是如何根据带有size子键的列表限制查询

代码语言:javascript
复制
let queryObservable = this.af.database.list('/items', {
  query: {
    orderByChild: 'size',
    startAt: 50,
    endAt: 100
  }
});

这应该会拉出所有具有size子键的项,该子键的定义在50到100之间。

注意到我注意到如果要将引用对象传入AngularFire2而不是引用路径,查询将NOT工作!因此,下面的代码仍将返回项目列表,但不会正确排序。

代码语言:javascript
复制
let ref = firebase.database().ref('/items');
this.af.database(ref, { query: { orderByChild: 'size' } });
票数 1
EN

Stack Overflow用户

发布于 2016-11-25 14:49:07

最近,我在一个博客帖子中查看了这个问题,但是您提出了一个有趣的边缘情况,在这种情况下,您的总查询将比您想要的要大。我会用和以前一样的方法来解决这个问题,但是实现一个开始和结束,而不是一个limitToLast。另外,您使用从rxjs导入的BehaviorSubjects,因为它们将允许您获得一定数量的当前值和增量。示例

代码语言:javascript
复制
let firstKey = new BehaviorSubject(''); // import 'rxjs/BehaviorSubject'
let nextKey = new BehaviorSubject('');
let pageSize = new BehaviorSubject(10);

let queryObservable = this.af.database.list('/items', {
 query: {
   orderByKey: true,
   startAt: firstKey,
   limitToFirst: pageSize
 }
});

现在,您有一个不断移动的窗口,从第一个键开始,并使用这些键作为排序的值。例如,为了能够更改密钥,您需要将所需的密钥存储在特定的位置。

代码语言:javascript
复制
queryObservable.subscribe((data) => {
    // angularfire2 adds a $key property to each result in an array
    // Does not handle the edge case at the end of the list
  if (data.length === pageSize.getValue()) {
    nextKey.next(data.$key);
  }
});

若要增加和减少窗口,只需将firstKey值更改为nextKey值。

代码语言:javascript
复制
firstKey.next(nextKey.getValue());

您可以做各种整洁的事情,比如添加多个页面,或者对这个方法做一些小小的调整。这与在数据库中添加必须维护的字段相反,在某些情况下,这些字段可能很麻烦。

票数 3
EN

Stack Overflow用户

发布于 2017-03-17 09:24:43

我还需要使用角2和Firebase进行简单的分页(下一页和前一页)。

我的解决方案是从列表itemPerPage + 1中查询一个额外的项,并将其作为参考。然后,使用startAtendAt选项,我可以用引用项对我的数据进行下一页和前一页。

我创建了一个要旨来展示我的解决方案,希望它能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39742272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档