angularJSの1系で総当たり戦をテーブルで表示するプログラムを組んでいます。
tableを縦方向、横方向それぞれにループさせて組んだ時点で二重ループになっています。
二重ループの場合、親のインデックスは$parent.$indexで取得できますが、
組んでいる総当たり戦のプログラムではセルの中でデータに合致するものを探す際にさらにループを走らせており、三重ループになっています。
元はJSPだったので三重ループでも問題なかったのですが、
AngularJSに移植するとインデックスが取れない問題が発覚しました。
html
1<table border=1 class="table"> 2 <thead> 3 <tr> 4 <th></th> 5 <th>チーム名</th> 6 <th>試合</th> 7 <th>勝利</th> 8 <th>敗北</th> 9 <th>引き分け</th> 10 <th>勝率</th> 11 <th>勝ち点</th> 12 <th>打率</th> 13 <th>防御率</th> 14 <th ng-repeat="i in range(items.length)">対{{$parent.items.resultList[i].shortName}}</th> 15 </tr> 16 </thead> 17 <tbody> 18 <tr ng-repeat="resultList in items.resultList"> 19 <th>{{$index+1}}</th> 20 <td>{{resultList.teamName}}</td> 21 <td>{{resultList.gameCount}}</td> 22 <td>{{resultList.win}}</td> 23 <td>{{resultList.lose}}</td> 24 <td>{{resultList.draw}}</td> 25 <td>{{resultList.percentage | number:3}}</td> 26 <td>{{resultList.points}}</td> 27 <td>{{resultList.avg | number:3}}</a></td> 28 <td>{{resultList.era | number:2}}</a></td> 29 <div ng-repeat="i in range($parent.items.length)"> 30 <td ng-repeat="opponentList in $parent.items.opponentList"> 31 <!-- <div ng-if="$parent.items.resultList.teamId==opponentList.teamId && $parent.items.resultList2[i].teamId==opponentList.opponent">--> 32 <div> 33 {{opponentList.win}}-{{opponentList.lose}}({{opponentList.draw}})</div> 34 </td> 35 </div> 36 </tr> 37 </tbody> 38</table>
APIから受け渡すデータの形式です。
json
1resultList[0]:{ 2avg:0.4195 3draw:0 4era:4.5454545 5gameCount:11 6leagueId:35 7lose:2 8opponent:null 9percentage:0.8182 10points:38 11rank:null 12shortName:"A" 13teamId:3 14teamName:"A" 15win:9 16} 17 18opponentList[0]:{ 19draw:0 20leagueId:35 21lose:4 22opponent:3 23teamId:1 24win:1 25}
コメントアウトしている部分で本来データの表示非表示を判定していました。
range()は()内に指定した回数ループする関数です。
opponentListはチームID1のチームはチームID3のチームに対して1勝4敗0分というデータを表します。
リストの要素が1対1でセルに対応しています。
resultList2はresultListのコピーなので中身は同じです。
現在考えているアプローチとしては、
- 親の親のインデックスが取れないか
- 上記が無理ならコントローラ側のjsでデータを加工するか
データを加工するにしても、
二重ループの中でループさせずにデータを紐付けたい、
あるいは
ループさせても親の親のインデックスを使わない構成にしたい
という状況で若干手詰まりです。
三重ループを経験されている方にお知恵を拝借したく存じます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/17 10:38
2017/08/18 00:12