【发布时间】:2020-10-08 07:47: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[] = [];
constructor(private usersService: UsersService) { }
ngOnInit(): void {
this.getRanking();
//1
console.log(this.usersRanking);
}
getRanking(){
firebase.database().ref('/users').orderByChild('ptsTotal')
.on('child_added',(data)=>{
this.usersRanking = data.val() ? data.val() : [];
//2
console.log(this.usersRanking);
});
}
}
第一个奇怪的事情。结果与我询问用户列表时的形状不同(没有 orderByChild)。返回结果在 4 中是分开的(因为我有 4 个用户)与用户列表一样,我的所有用户只有 1 个对象。
这是获取我的用户列表的功能。我使用 users:User[] 和 emitUsers() 是用 rxjs 做一个 Observable。
getUsers(){
firebase.database().ref('/users')
.on('value',(data)=>{
this.users = data.val() ? data.val() : [];
this.emitUsers();
});
}
第二个奇怪的事情。我的第二个 console.log() 显示 4 个结果与第一个 console.log() 一样(ngOnInit 中的一个只显示一个结果(我的用户得分最多)。
第三个奇怪的事情。我的 HTML 不工作。我使用 ngFor,页面上的结果是 6 行(我只有 4 个用户)。当我使用相同的方法仅显示我的用户(无顺序)时,此 Html 正在工作
名字:-姓氏:-点数:
名字:-姓氏:-点数:
名字:-姓氏:-点数:
名字:-姓氏:-点数:
名字:-姓氏:-点数:
名字:-姓氏:-点数:
(下面的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>
提前感谢您的帮助!
【问题讨论】:
-
请在每个帖子中限制自己一个问题。对于您在这里的第一个问题:您能否编辑您的问题以显示您所描述的两种情况的代码,以便我们可以比较它们?如果您可以显示两种情况的输出,那也很棒,最好使用
console.log语句,这样我们就不必考虑 Angular 方面了。 -
对不起,弗兰克,如果我做错了。对我来说,这些问题是相互关联的,有助于理解我的问题。也就是说,我不明白如何使用 orderByChild 方法处理我的 firebase 输出。
-
在一个帖子中发布多个问题,使得某人不可能/将回答所有问题(正如我只询问您的第一个问题的事实已经证明的那样),并且更有可能您的由于过于宽泛,帖子将被关闭。我会看看你更新的代码/输出。
标签: javascript angular firebase firebase-realtime-database