如何使 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>
但请尝试一下,希望对您有所帮助。
我正在使用 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>
但请尝试一下,希望对您有所帮助。