我正在尝试创建一个应用程序,以帮助我学习离子,firebase,角度和所有这些东西,我似乎无法从数据库中获取正确的数据。我有一个离线应用程序有一个"帖子"获得"帖子的提供商"来自数据库。它应该按dateCreated排序,但它不是。 这是我的代码的简单版本......
home.ts
import { PostsProvider } from '../../providers/posts/posts';
...
@Component({...})
export class HomePage {
posts: any;
constructor(public postsService: PostsProvider) {
this.posts = this.postsService.getPosts();
}
}
posts.ts
import { AngularFireDatabase, FireListObservable } from 'angularfire2/database';
...
@Injectable
export class PostsProvider {
constructor(public afPosts: AngularFireDatabase) {
}
getPosts() {
return this.afPosts.list('/posts', {query: {orderByChild: 'dateCreated', limitToLast: 20}});
}
}
然后在我的home.html文件中我有...
<ion-content padding>
<ion-card *ngFor="let post of posts | async">
<img src="{{post.image}}">
<ion-card-content>
<p>{{post.createdOn}}</p>
<p>{{post.content}}</p>
</ion-card-content>
</ion-card>
</ion-content>
我的数据库非常简单,并且有适当的规则供订购。以下是数据库中数据的示例...
{
"posts" : {
"-KpGyBqzVKBhLmz0Ydo-" : {
"author_id" : "mScPMapCgFdiA220zD3eYHoszF43",
"comments" : [ {
"author_id" : "fFlYs8NHVegGkI3r4regmxRtFaG3",
"content" : "Hopefully a new comment shows up on this post",
"dateCreated" : 1498223724293
}, {
"author_id" : "fFlYs8NHVegGkI3r4regmxRtFaG3",
"content" : "A new Comment maybe?",
"dateCreated" : 1497130709242
}, {
"author_id" : "fFlYs8NHVegGkI3r4regmxRtFaG3",
"content" : "Another ones",
"dateCreated" : 1498103266757
} ],
"content" : "Sweet crap I hope this works",
"dateCreated" : 1494841863173,
"image" : "https://firebasestorage.googleapis.com/XXXXXXXXXXXXXXXX",
"postedAgo" : "1S",
"title" : "First Post"
}
}
然后我的规则如下......
{
"rules": {
"posts": {
".read": "auth != null",
".write": "auth != null",
".indexOn": "dateCreated"
}
}
}
dateCreated只是一个&#34;新的Date()。getTime()&#34;这样很容易订购,因为它只是一个整数。问题是,无论出于什么原因,数据库都是按照&#34; author_id&#34;然后通过&#34; dateCreated&#34;。我在页面上显示的所有帖子都是按时间顺序排列的,但是按照author_id进行分组,所以我会看到一个人按顺序发布的所有内容,然后是其他人按顺序发布的内容,而不是只是按照dateCreated排序字段。
任何人都可以看到为什么这不会命令他们正确吗?它让我疯了,所有的文档都说在规则中添加.indexOn,然后在查询数据时添加orderByChild。我也尝试过这样使用它......
this.afPosts.ref('/posts').orderByChild('dateCreated').limitToLast(20).subscribe(data => { ... });
但我得到了相同的输出。它由用户订购,然后按日期排序。任何帮助将不胜感激。谢谢。