使用angularfire2无法正确排序firebase数据

时间:2017-07-26 22:18:52

标签: javascript firebase firebase-realtime-database ionic2 angularfire2

我正在尝试创建一个应用程序,以帮助我学习离子,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 => { ... });

但我得到了相同的输出。它由用户订购,然后按日期排序。任何帮助将不胜感激。谢谢。

0 个答案:

没有答案