前提・実現したいこと
Vue.js
のv-for
でリストを表示しています。
そのリスト内に金額があり、その合計をしたいと思っています。
発生している問題・エラーメッセージ
v-for
内で金額の合計をし、最後に合計欄に出力することはできないのでしょうか。
該当のソースコード
以下のようなイメージです。
moneyA
とmoneyB
の合計値をforループ後にtotalMoneyA
とtotalMoneyB
に表示させたい。
ちなみにlist
は動的に変更されることがあります。
vue
1<template> 2 <table> 3 <template v-for="(item, idx) in list"> <!-- ← 1回目のループ --> 4 <tr> 5 <td>{{ item.moneyA }}</td> 6 <td>{{ item.moneyB }}</td> 7 </tr> 8 </template> 9 <!-- 合計欄 --> 10 <tr> 11 <td>{{ totalMoneyA }}</td> 12 <td>{{ totalMoneyB }}</td> 13 </tr> 14 </table> 15</template>
試したこと
computed
内でリストを合計し、表示させることはできたのですが、
それだとリストの表示で1回、computed
で2回と合計で3回リストのループが発生します。
list
が大きくなってくると表示速度に支障が出てくるのかなと思っています。
vue
1export default { 2 data () { 3 return { 4 list: [], // ← 後でajaxで値が入ります 5 } 6 }, 7 computed: { 8 totalMoneyA() { 9 let sum = 0; 10 for (const item of this.list) { // ← 2回目のループ 11 sum += Number(item.moneyA); 12 } 13 return sum; 14 }, 15 totalMoneyB() { 16 let sum = 0; 17 for (const item of this.list) { // ← 3回目のループ 18 sum += Number(item.moneyB); 19 } 20 return sum; 21 }, 22 }, 23}
最悪これでいくかもしれませんが、v-for
の1回のループで処理できたらスマートなのかなと思いました。
以上、ご教授よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/15 04:13