我正在使用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
}
}
}
答案 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()
}
仍在寻找更好的解决方案。