AngularJS:从Firebase获取分页记录

时间:2015-02-17 09:27:46

标签: javascript angularjs firebase angularfire

我正在尝试使用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获取下一组数据。 任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:4)

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-repeat中过滤掉第一项。

另外,请查看此jsfiddle showing a simple paginate class