【发布时间】:2016-07-23 08:18:30
【问题描述】:
我正在使用 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
}
}
}
【问题讨论】:
-
我认为您的问题是,您按日期作为字符串而不是作为 Date 对象进行排序。看看这个答案:stackoverflow.com/a/25306447/752142.
-
@illagrenan 我的 orderBy 工作正常...或者您是说将其更改为 Date ngInfiniteScroll 将识别
"-createdAt"? -
因此,如果您只是使用简单的 ngRepeat 在没有 ngInfiniteScroll 的情况下打印它们,那么您的项目是否正确排序?如果您使用
infinite-scroll='someService.nextPage()'项目没有订购?我对么?简单的解决方案可能是:从 API 检索项目,在您的服务/控制器中订购它们,然后从infinite-scroll='myMethod()'返回订购的数据。 -
对。今天它对使用 ngInfiniteScroll 检索的数据集进行排序,但它们首先是较旧的数据集。我想先获取新的集合,这就是我对 ngInfiniteScroll 的期望...... >
-
我对 firebase 不是很熟悉,但是,使用 ngInfiniteScroll 会加载远程数据。因此,如果您希望它按特定顺序排列,则需要在 firebase 查询中指定它。一些快速搜索将我引向
orderByChild方法。同样根据我的发现,Firebase 没有日期类型,因为它是 JSON。您需要将createdAt设置为表示日期的原始类型 (createdAt: date.getTime())。然后我认为你可以做类似ref.orderByChild("-createdAt").
标签: angularjs nginfinitescroll