AngularJS:从Firebase获取用于分页的记录

AngularJS : Fetch records for pagination from Firebase

本文关键字:分页 记录 用于 获取 Firebase AngularJS      更新时间:2024-01-02

我正在尝试使用AngularJS和Firebase作为后端来实现分页。我使用以下代码从firebase url获取数据:

var firebaseObj = new Firebase("<firebaseUrl>.com/Details/");
var sync = $firebase(firebaseObj.startAt($scope.username).endAt($scope.username).limitToFirst(5));
$scope.articles = sync.$asArray();

上面的查询给了我前5条记录,它们以特定的username开始和结束。现在如何获取索引6到10的下一组数据。任何帮助都将不胜感激。。。

Firebase中没有偏移函数,当您开始探索实时、协作方面时,这是有意义的(偏移在流动数据集中没有实际意义)。

你的具体问题的答案其实和听起来一样简单。该算法是一种基本的光标策略,看起来像这样:

  • 从当前数据集中查找最后一个键
  • 使用startAt和limit获取下一个集合(页数加一)
  • 丢弃第一个密钥
  • 将数据应用于$scope

这看起来像以下内容:

function getLastKey(obj) {
    return Object.keys(obj).pop();
}
function nextPage() {
   var lastKey = Object.keys($scope.articles);
   // stop listening to the old data
   $scope.articles.$destroy();
   var ref = firebaseObj.orderByKey()
      .startAt(lastKey)
      // 5 + 1 to account for the lastKey being in the results
      .limitToFirst(6);
   // sync to the new results
   $scope.articles = $firebase(ref).$asArray();
}

在实践中,要使分页在Angular中优雅地工作,还有很多工作要做。

其中最明显的是,我们需要有一些方法来跳过第一个记录。据推测,我们知道页码,因此可以使用自定义筛选函数从ng-reeat中筛选出第一个项目。

另外,看看这个jsfiddle,它显示了一个简单的分页类。