В сумме saldos
можно добавить свойство computed
и использовать reduce
для расчета суммы:
computed: {
totalValue() {
return this.saldos.map(({data}) => data).flat().reduce((a, b) => a + b.balance, 0);
}
}
IЯ не знаю, как можно было бы добавить vue
вычисленные свойства внутри цикла.Согласно этому ответу вы должны либо создать компонент для каждого bank
, либо добавить функцию с именем getBankTotal
внутри methods
:
getBankTotal: function(bank){
return bank.data.reduce((a, b) => a + b.balance, 0)
}
и использовать ее в своем HTML:
<h3>{{getBankTotal(bank)}}</h3>
Вот рабочий фрагмент: (Я раньше не использовал vue
. Итак, исправьте меня, если какой-либо синтаксис или шаблон неверен)
var saldo = new Vue({
el: "#listasaldos",
data: {
saldos: [],
},
created: function() {
this.get_saldos();
},
methods: {
getBankTotal: function(bank) {
return bank.data.reduce((a, b) => a + b.balance, 0)
},
get_saldos: function() {
this.saldos = [{
data: [{
name: "a/c 1",
balance: 100
}]
}, {
data: [{
name: "a/c 2",
balance: 300
}, {
name: "a/c 3",
balance: 400
}]
}]
}
},
computed: {
totalValue() {
return this.saldos.map(({data}) => data).flat().reduce((a, b) => a + b.balance, 0);
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="listasaldos">
<h1>Title</h1>
<h2>Total Value: {{totalValue}}</h2>
<div v-for="bank in saldos">
<h3>Partial Value: {{getBankTotal(bank)}}</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Balance</th>
</tr>
</thead>
<tbody>
<tr v-for="account in bank.data">
<td>{{account.name}}</td>
<td>{{account.balance}}</td>
</tr>
</tbody>
</table>
<hr>
</div>
</div>