如何使 ngInfiniteScroll 通过 createdAt 降序检索数据

How to make ngInfiniteScroll retrieve data by createdAt Descending

我正在使用 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
            }
         }
      }

在更深入地查看可用文档后,我发现了一个丑陋的解决方法 here

基本上就是使用负时间戳,正常获取createdAt(升序)

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

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

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

看起来您找到了解决方案,但您使用 orderBy 的管道是正确的,但请尝试稍微调整一下。尝试使用 orderBy:'+':true",其中 orderBy 表示您想按某项进行排序,而 +:true 表示在任何新内容位于顶部的位置进行排序,-:true 表示排序新内容内容在底部。但是您可以查看 angular 文档 here。因此,如果在 HTML 侧处理它,它看起来像这样 ng-repeat="post in posts| orderBy:'+':true" 或:

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

但请尝试一下,希望对您有所帮助。