如何使ngInfiniteScroll通过createdAt Descending检索数据

时间:2016-04-03 21:52:22

标签: angularjs nginfinitescroll

我正在使用firebase来保存包含以下数据的帖子:

createdAt: "Sun Apr 03 2016 18:32:46 GMT-0300 (BRT)"

我想要实现的是先获取最新帖子,然后在用户向下滚动时加载旧帖子。

使用ngInfiniteScroll检索帖子我可以使用<div ng-repeat="post in posts | orderBy:'-createdAt'">订购desc但ngInfiniteScroll会先保留旧帖子。我订购了,但是我订的是旧的。

我已尝试在ngInfiniteScroll中使用相同的逻辑("-createdAt"),但效果不佳。

我的js就是这样:

  var baseRef = new Firebase(FBURL).child("posts");
  var scrollRef = new Firebase.util.Scroll(baseRef, "createdAt");
  $scope.posts = $firebaseArray(scrollRef);
  $scope.posts.scroll = scrollRef.scroll;

安全和规则:

"posts": {
          ".read": true,
          ".indexOn": "createdAt",
          "$post": {
            ".read": true,
            ".write": true,
            "$other": {
               ".validate": true
            }
         }
      }

2 个答案:

答案 0 :(得分:2)

看起来你找到了你的解决方案,但是你使用orderBy在正确的轨道上滚动,但只是尝试稍微调整一下。尝试使用orderBy:'+':true",其中orderBy这表示您希望按某种方式对其进行排序,而+:true表示将新的内容排在最前面,-:true会说新订单底部的内容。但你可以查看它的角度文档here。因此,如果在HTML端处理它,它看起来像这个ng-repeat="post in posts| orderBy:'+':true"或:

    <div ng-repeat="post in posts| orderBy:'+':true">
           [....post info here]
      </div>

但试一试,希望它有所帮助。

答案 1 :(得分:1)

在深入了解可用的文档后,我可以找到一个丑陋的解决方法here

基本上使用负时间戳并正常检索createdAt(升序)。

因此,在保存数据时,请执行以下操作:

{
  createdAt: Firebase.ServerValue.TIMESTAMP,
  createdAtDesc: 0 - Date.now()
}

仍在寻找更好的解决方案。