2017-07-14 62 views
0

,我有以下数据库值的列表:遍历一个特定的记录

{ 
    "games" : [ { 
    "event" : [ "Event 1", "Event 2", "Event 3" ], 
    "name" : "Game 1" 
    }, { 
    "event" : [ "Event 1", "Event 2", "Event 3" ], 
    "name" : "Game 2" 
    } ] 
} 

我试图通过使用与angularjs属性的特定游戏中的所有事件,以弄清楚如何循环。这里是一个例子:

在这里,我遍历所有的游戏,并打印出每个游戏的按钮。然后,如果你点击按钮,它使游戏变得活跃:

<div class="row"> 
    <div class="col-xs-12 col-md-4 noPadding" ng-repeat="game in data.games"> 
     <div class="form-group"> 
      <button 
       type="button" 
       class="btn largeButton" 
       ng-class="{'btn-success':game==data.game,'btn-danger':gameType!=data.game}" 
       ng-click="data.child('game').set(game);"> 
       {{game}} 
      </button> 
     </div> 
    </div> 
</div> 

现在接下来,我需要遍历所有的事件,并打印出该游戏的按钮,但我不知道如何做到这一点通过属性。

<div ng-repeat="event in data.games.where(game:game.name == 'Game 1').events"> 

就像我上面写的那样?

我相当新与angularjs。我在寻找使用| filter,但我似乎无法弄清楚如何做表达。

+0

确实,你需要使用过滤器。创建jsfiddle以便使用某些东西 – yBrodsky

回答

1

诀窍是在第一个循环的game元素上循环并用点符号访问game.event数组。 ng-if语句可以检查当前数组元素(game.event[i])是否是您当前的游戏。如果该ng-if语句失败,则第一个div之后的所有AngularJS代码将不会执行,并且不会生成任何按钮。

我使用currentGame来避免变量名碰撞作为一个$ scope变量,它存储了当前选择的游戏的名称:假设设置在你的data.child('游戏').set(游戏)函数中,当用户选择一个游戏来玩你以前提供的代码。

<div class="col-xs-12 col-md-4 noPadding" 
    ng-repeat="game in data.games" 
    ng-if="currentGame = game.name"> 
    <div ng-repeat="eventElement in game.event"> 
     <button id="{{eventElement}}-button" 
      class='btn primary' 
      ng-click="startGame(eventElement)">{{eventElement}}</button> 
    </div> 
</div> 

希望这回答你的问题,并且有道理。 :)