AngularFire 按排名自定义顺序
AngularFire custom order by ranking
我正在尝试使用 AngularFire 和 Firebase 按排名对团队进行排序。
在 Firebase 中,我有 4 个团队,我只存储名称。
我还存储了比赛,它参考了双方对比赛的争议以及每场比赛的得分。
匹配节点如下所示:
matches
-KQgphN_5692GySN0Oxz
home_team: teamA
away_team: teamB
score
home: 1
away: 2
-KQlu6XLak6LgAr9cTty
home_team: teamC
away_team: teamD
score
home: 2
away: 2
团队节点:
teams
teamA
name: "Team A"
teamB
name: "Team B"
teamC
name: "Team C"
teamD
name: "Team D"
所以,我需要通过实时观看结果来按胜负对这些球队进行排序。
我有一个 ng-repeat 列出了这样的团队:
<li ng-repeat="team in teams">{{team.name}}</li>
那么,考虑到胜场积3分,平场积1分,负场积0分,我该如何对这些球队进行排序呢?
以上面的比赛为例,排名应该是:
1 - B 队
2 - C 队
3 - D 队
4 - A 队
您可以按嵌套值对 Firebase 数据库查询进行排序,只要该嵌套值位于固定路径中即可。这意味着您需要存储每个团队的分数,例如
teams
teamA
name: "Team A"
score: 20
teamB
name: "Team B"
score: 12
teamC
name: "Team C"
score: 42
teamD
name: "Team D"
score: 31
使用此结构,您可以按顺序加载顶级团队:
var leaders = ref.child('teams').orderByChild('score').limitToLast(3);
leaders.on('value', function(snapshot) {
leaders.forEach(function(leaderSnapshot) {
console.log(leaderSnapshot.child('name').val());
});
});
这将打印:
Team A
Team D
Team C
所以要获得排行榜,您需要反转它们。
我正在尝试使用 AngularFire 和 Firebase 按排名对团队进行排序。
在 Firebase 中,我有 4 个团队,我只存储名称。 我还存储了比赛,它参考了双方对比赛的争议以及每场比赛的得分。
匹配节点如下所示:
matches
-KQgphN_5692GySN0Oxz
home_team: teamA
away_team: teamB
score
home: 1
away: 2
-KQlu6XLak6LgAr9cTty
home_team: teamC
away_team: teamD
score
home: 2
away: 2
团队节点:
teams
teamA
name: "Team A"
teamB
name: "Team B"
teamC
name: "Team C"
teamD
name: "Team D"
所以,我需要通过实时观看结果来按胜负对这些球队进行排序。
我有一个 ng-repeat 列出了这样的团队:
<li ng-repeat="team in teams">{{team.name}}</li>
那么,考虑到胜场积3分,平场积1分,负场积0分,我该如何对这些球队进行排序呢?
以上面的比赛为例,排名应该是:
1 - B 队
2 - C 队
3 - D 队
4 - A 队
您可以按嵌套值对 Firebase 数据库查询进行排序,只要该嵌套值位于固定路径中即可。这意味着您需要存储每个团队的分数,例如
teams
teamA
name: "Team A"
score: 20
teamB
name: "Team B"
score: 12
teamC
name: "Team C"
score: 42
teamD
name: "Team D"
score: 31
使用此结构,您可以按顺序加载顶级团队:
var leaders = ref.child('teams').orderByChild('score').limitToLast(3);
leaders.on('value', function(snapshot) {
leaders.forEach(function(leaderSnapshot) {
console.log(leaderSnapshot.child('name').val());
});
});
这将打印:
Team A
Team D
Team C
所以要获得排行榜,您需要反转它们。