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

Angularjs 如何使ngInfiniteScroll通过createdAt降序检索数据,angularjs,nginfinitescroll,Angularjs,Nginfinitescroll,我正在使用firebase保存包含以下数据的帖子: createdAt: "Sun Apr 03 2016 18:32:46 GMT-0300 (BRT)" 我试图实现的是先获取最新的帖子,然后在用户向下滚动时加载较旧的帖子 通过使用ngInfiniteScroll检索帖子,我可以使用订购desc,但ngInfiniteScroll会先返回旧帖子。我点的是旧的,但我点的是旧的 我已经尝试在ngInfiniteScroll中使用相同的逻辑(“-createdAt”),但没有效果 我的js大致如

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

createdAt: "Sun Apr 03 2016 18:32:46 GMT-0300 (BRT)"
我试图实现的是先获取最新的帖子,然后在用户向下滚动时加载较旧的帖子

通过使用ngInfiniteScroll检索帖子,我可以使用
订购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
            }
         }
      }

在深入查看可用的文档后,我可以找到一个难看的解决方法

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

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

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

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

看起来您找到了解决方案,但使用
orderBy
时,您走的是正确的道路,但只需稍微调整一下即可。尝试使用
orderBy:'+':true“
,其中,
orderBy
这表示您想按某物进行订购,
+:true
表示在顶部有新内容的地方订购,其中
-:true
表示在底部订购新内容。但是你可以在有角度的文档中查找它。因此,如果在HTML端处理它,它看起来像这样的
ng repeat=“post in posts | orderBy:“+”:true”
或:

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

[…在此发布信息]

但是试试看,希望能有所帮助。

我认为您的问题是,您是按日期作为字符串排序,而不是按日期对象排序。看看这个答案:@illagrenan我的订货人工作得很好。。。或者您的意思是,将其更改为最新的ngInfiniteScroll将识别
“-createdAt”
?因此,如果您仅使用简单的ngRepeat在不使用ngInfiniteScroll的情况下打印物品,您的物品将正确订购?如果您使用
infinite scroll='someService.nextPage()'
项目未订购?我说得对吗?简单的解决方案可能是:从API检索项目,在服务/控制器中对它们进行排序,然后从
infinite scroll='myMethod()'
返回排序数据。今天,它订购了使用ngInfiniteScroll检索的数据集,但它们首先是较旧的数据集。我想先买新的电视机,这就是我对NGINFITESCROLL的期望。。。。如果我了解你的解决方案,那就是先发所有帖子,然后再下订单,这没有任何意义,因为我正试图用ngInfiniteScroll获得更好的性能。但是,我对firebase不太熟悉,使用ngInfiniteScroll加载远程数据。因此,如果您希望它按特定顺序排列,则需要在firebase查询中指定该顺序。通过一些快速搜索,我找到了
orderByChild
方法。同样根据我的发现,Firebase没有日期类型,因为它是JSON。您需要将
createdAt
设置为表示日期的基本类型(
createdAt:date.getTime()
)。然后我想你可以做一些类似于
ref.orderByChild(“-createdAt”)
的事情。关于你的解决方案如何解决问题的更多细节如何?我想通过createdAt desc订购的内容在哪里?Firebase会在创建时为你添加新的帖子。您会注意到,当您将任何新帖子添加到firebase数组时,它都会添加到堆栈的底部。因此,当您像这里一样填充
$scope.posts
$scope.posts=$firebaseArray(scrollRef)
firebase正在将它们推送到您的
$scope.posts中。以相同的顺序将
$scope.posts
变量放置在桩中。即使较小的post在较大的post之前加载几毫秒,它仍会将较大的post按顺序放置在前面。如果你将它们保存在firebase端,就像一个对象,而不是它们的预生成字符串(如
-KFC4qa-dn3r
),我不能说同样的话(因为我没有尝试过),但是你这样做我认为也很好,我不认为这是一个“丑陋的解决方法”虽然可能是多余的,因为它已经由firebase为您处理了,但现在有了时间戳,您可以使用类似