【问题标题】:Angular4 Firebase FirebaseListObservable control index to display on htmlAngular4 Firebase FirebaseListObservable 控件索引显示在 html 上
【发布时间】:2018-01-13 11:11:27
【问题描述】:

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

排行榜

  • 第一名:未知,最高分:未知
  • 第二名:未知,最高分:未知
  • 第三名:未知,最高分:未知
  • 第四名:未知,最高分:未知
  • 第五名:未知,最高分:未知
  • 我的 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 的索引??

    【问题讨论】:

    • 你可以尝试给observable添加一个map函数来颠倒返回的顺序。 .map(res => res.reverse())

    标签: angular typescript firebase angularfire


    【解决方案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 的数组被反转了。

    【讨论】:

    • 感谢您的回答.. 但是当我在函数上使用 .map(res =&gt; res.reverse()); 时,我在 this.users 中说 ** [ts] Type 'Observable' is notassignable to type ' FirebaseListObservable'。 'Observable' 类型中缺少属性 '$ref'。 ** 我导入import { Observable } from 'rxjs/Rx'; 来使用地图对吗??
    • @Zekelonas 您需要导入地图功能。导入'rxjs/add/operator/map';
    • 看起来这是一个常见问题forum.ionicframework.com/t/…,所以你可以成为顶级用户:FirebaseListObservable;进入顶级用户:Observable;
    • 你也可以指定 map 函数返回一个 FirebaseListObservable stackoverflow.com/questions/41094860/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多