Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
Ahoj,
třeba někdo bude vědět. Mám cyklus a potřebuji na každém řádku dostat do dalšího inputu součet dvou předchozích. Pokud použiji metodu tak to funguje, ale jako v-model ne, nemůžu ani nic korektního "vygoglit". Demo ukázka: stackblitz.com/edit/superlasice?file=src%2Fmain.js <template> <div id="app"> <button v-on:click="add">add new row</button> <p>Total price {{ total }} | {{ total2 }}</p> <ul> <li v-for="(item, index) in items"> Name<br /> <input type="text" v-model="item.name" /> <br /> Quantity<br /> <input type="number" v-model.number="item.quantity" min="1" /> <br /> Price<br /> <input type="number" v-model.number="item.price" min="0.00" max="1000000000.00" step="0.01" /> <br /> Total (readonly) <br /> <input v-model="totalItem(item)" readonly /> <br /> total in row: {{ totalItem(item) }} <br /> <br /> <button v-on:click="remove(index)">Delete row</button> <hr /> </li> </ul> </div> </template> <script> export default { name: 'App', data() { return { items: [ { name: 'A', quantity: 1, price: 20 }, { name: 'B', quantity: 2, price: 30 }, ], }; }, methods: { add() { this.items.push({ name: '', quantity: '', price: '', }); }, remove(index) { this.items.splice(index, 1); }, totalItem(item) { return item.price * item.quantity; }, }, computed: { total() { let sum = 0; this.items.forEach((item) => { sum += parseFloat(item.price) * parseFloat(item.quantity); }); return sum; }, // another approach how to sum total2() { return this.items.reduce((prev, item) => { return prev + item.price * item.quantity; }, 0); }, }, }; </script> Vyřešeno přes computed pole (ale moc se mi to nelíbí, určitě to jde líp). stackblitz.com/edit/superlasice-efzixd?file=src%2FApp.vue |
||
Časová prodleva: 4 roky
|
0