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

所以要获得排行榜,您需要反转它们。