Angular4 Firebase FirebaseListObservable控件索引,显示在html

时间:2017-08-05 18:07:12

标签: angular typescript firebase angularfire

我想在我的应用程序中创建一个排行榜。所以我需要从Firebase数据库中读取名称和totalscores信息并在浏览器上显示它们。 我的目标是在浏览器上显示类似这样的内容,但当然用数据库用户名和topscores替换Unknown。

  

排行榜                              

  • 首先:未知,最高分数:未知
  •                 
  • 二:未知,最高分数:未知
  •                 
  • 第三:未知,最高分数:未知
  •                 
  • 第四:未知,最高分数:未知
  •                 
  • 第五:未知,最高分数:未知
  •             

    我的firebase数据库是:

    "users" : {
        "Test1" : {
          "totalscore" : 50,
          "username" : "test1"
        },
        "Test2" : {
          "totalscore" : 30,
          "username" : "test2"
        },
        "Test3" : {
          "totalscore" : 20,
          "username" : "test1"
        },
        "Test4" : {
          "totalscore" : 10,
          "username" : "test1"
        },
        "Test5" : {
          "totalscore" : 50,
          "username" : "test1"
        },
        "Test6" : {
          "totalscore" : 30,
          "username" : "test2"
        },
        "Test7" : {
          "totalscore" : 20,
          "username" : "test1"
        },
        "Test8" : {
          "totalscore" : 10,
          "username" : "test1"
        }
      }
    

    使用以下代码,我可以从我想要的内容中获得反转信息。

    topusers: FirebaseListObservable<any>;
      constructor(db: AngularFireDatabase) {
    
    
            this.topusers = db.list('users', {
            query: {
             orderByChild: "totalscore",
             limitToLast: 10,
            }
            });
       } 
    

    最后使用* ngFor我可以显示从第五个到第一个的5个最高分。

    <ul *ngFor="let topuser of topusers | async">
      <li class = "white" > 
          {{ topuser.username | json }}:
          {{ topuser.totalscore | json }}          
      </li>
    </ul>
    

    我的问题是,是否有任何方法可以控制* ngFor而不是从列表的第一个索引开始从最后一个开始到第一个结束? 或者无论如何我可以控制我想在浏览器上显示的FirebaseListObservable的索引吗?

    1 个答案:

    答案 0 :(得分:1)

    您不一定要操纵ngFor的顺序,而是操纵传递给ngFor的数据。您可以使用.map方法

    反转从firebase observable返回的数据的顺序
    topusers: Observable<any>; // use Observable<> instead of FirebaseListObservable<> since .map is an rxjs method that returns the type Observable
    
    constructor(){
        this.topusers = db.list('users', {
            query: {
                orderByChild: "totalscore",
                limitToLast: 10,
            }
        })
        .map(res => res.reverse());
    }
    

    所以现在传递给ngFor的数组是相反的。