AngularFire按排名定制订单

时间:2016-09-03 22:26:12

标签: angularjs firebase firebase-realtime-database angularfire

我正在尝试使用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"

所以,我需要通过实时观察结果,通过vitories,draw和loss来订购这些团队。

我有一个ng-repeat,列出了这样的团队:

<li ng-repeat="team in teams">{{team.name}}</li>

那么,我如何通过胜利来命令这些球队,考虑到胜利相当于3分,平局是1分而损失是0分?

使用上述匹配示例,排名应为:

1 - B队

2 - C队

3 - D队

4 - A队

1 个答案:

答案 0 :(得分:0)

您可以按嵌套值订购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());
    });
});

这将打印:

  

A队

     

D队

     

C队

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