【问题标题】:Firebase - Angular / I'm not able to display my result with orderByChild methodFirebase - Angular / 我无法使用 orderByChild 方法显示我的结果
【发布时间】:2020-06-22 09:17:36
【问题描述】:

我有一个这样组织的用户数据库:

Database
 - Users
  - Id (determined thanks to the push method)
    - email
    - firstName
    - ptsTotal
    - ...

我想使用 orderByChild 方法根据 ptsTotal(游戏中的点数)建立我的用户排名。

下面是我在 Angular 中的组件:

import { Component, OnInit } from '@angular/core';
import {UsersService} from '../../services/users.service';
import {User} from '../../models/user.model';
import * as firebase from 'firebase';

@Component({
  selector: 'app-total',
  templateUrl: './total.component.html',
  styleUrls: ['./total.component.scss']
})
export class TotalComponent implements OnInit {

  usersRanking:User[] = [];
  tableau:any[];

  constructor(private usersService: UsersService) { }

  ngOnInit(): void {
    this.getRanking();
  }

  getRanking(){
    firebase.database().ref('/users').orderByChild('ptsTotal')
    .on('value',(data)=>{
      data.forEach((childSnapshot) => {
        var childData = childSnapshot.val();
            this.tableau.push(childData);

      });

    });
}
}

这是我在控制台中的输出

我的 Html 无法正常工作。我使用 ngFor,页面上的结果是 6 行(我只有 4 个用户)。

名字:-姓氏:-点数:

名字:-姓氏:-点数:

名字:-姓氏:-点数:

名字:-姓氏:-点数:

名字:-姓氏:-点数:

名字:-姓氏:-点数:

(下面的HTML代码)

<div class="row">
  <div class="col-xs-12">
    <h2>Users Ranking</h2>
    <div class="list-group"
        *ngFor="let user of usersRanking | keyvalue async">
        <p>firstName : {{user.value.firstName}} - LastName : {{user.value.lastName}} - Number of Points : {{user.value.ptsTotal}}</p>
    </div>
  </div>
</div>

提前感谢您的帮助!

P.S:这是我使用“value”而不是“child_added”时的控制台。我的用户没有被订购:

【问题讨论】:

    标签: javascript angular firebase firebase-realtime-database


    【解决方案1】:

    使用value 事件:

    tableau:any[] = [];
    
    getRanking(){
      firebase.database().ref('/users').orderByChild('ptsTotal')
      .on('value',(data)=>{
      data.forEach((childSnapshot) => {
        var childData = childSnapshot.val();
        this.tableau.push(childData);
       });
    });
    

    然后使用forEach()循环内部数据,然后将数据添加到数组tableau中,并在html内部使用。

    【讨论】:

    • 没有 orderbychild 你能得到屏幕上的值吗?
    • 是的,当我刚刚检索我的数据时,它正在工作,但控制台中的输出不同
    • 我可以看到数据(如果我使用 {{user.value.firstName}} - 但数据没有根据我的 ptsTotal 排序
    • 它将按升序排列
    • 它应该 :) 因为现在,它没有被订购。第一个是70,第二个是65,第三个是100,最后一个是0,我加个图给大家看
    猜你喜欢
    • 2020-10-08
    • 2019-03-21
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2012-03-26
    相关资源
    最近更新 更多