I’m learning how the v-for
loops work in Vue. Really liking the idea that I can run the loop directly in my template HTML
but unsure how to properly use the v-for loop to delve into a multi level array.
I have variable called playerDataList
it contains some JSON data. A sample of which is below
"stats" : [ { "type" : { "displayName" : "yearByYear", "gameType" : null }, "splits" : [ { "season" : "20052006", "stat" : { "assists" : 43, "goals" : 49, "pim" : 82, "games" : 62, "penaltyMinutes" : "82", "faceOffPct" : 0.0, "points" : 92 }, "team" : { "name" : "Lon. Jr. Knights", "link" : "/api/v1/teams/null" }, "league" : { "name" : "Minor-ON", "link" : "/api/v1/league/null" }, "sequenceNumber" : 1 }, { "season" : "20062007", "stat" : { "assists" : 15, "goals" : 7, "pim" : 30, "games" : 62, "powerPlayGoals" : 0, "penaltyMinutes" : "30", "faceOffPct" : 0.0, "shortHandedGoals" : 0, "plusMinus" : 11, "points" : 22 }, "team" : { "id" : 1874, "name" : "Kitchener", "link" : "/api/v1/teams/1874" }, "league" : { "id" : 141, "name" : "OHL", "link" : "/api/v1/league/141" }, "sequenceNumber" : 1 }, { "season" : "20072008", "stat" : { "assists" : 40, "goals" : 25, "pim" : 57, "games" : 68, "powerPlayGoals" : 10, "penaltyMinutes" : "57", "shortHandedGoals" : 0, "plusMinus" : 9, "points" : 65 }, "team" : { "id" : 1874, "name" : "Kitchener", "link" : "/api/v1/teams/1874" }, "league" : { "id" : 141, "name" : "OHL", "link" : "/api/v1/league/141" }, "sequenceNumber" : 1 } }]
I’ve got this code so far, and it works to display my content, but it’s only pulling me the first instance. It’s not actually looping and giving me each occurrence.
<div class="player-stats-card-inner"> <p class="close" v-on:click='showPlayers = !showPlayers'>Close</p> <table> <th> <td>Goals</td> <td>Assists</td> </th> <!-- Loop through the JSON data --> <tr v-for="stats in playerDataList.stats" :key="stats.id"> <td> {{stats.splits[0].stat.goals}} </td> <td> {{stats.splits[0].stat.assists}} </td> </tr> </table> </div>
Is there anything I could do differently to get this properly looping?
Advertisement
Answer
You need to loop the inner properties of stat
. It is not an array.
<tr v-for="stats in playerDataList.stats" :key="stats.id"> <td v-for='(value, name) of stats.splits[0].stat'> {{name}} : {{value}} </td> </tr>