效果:
<template> <div> <div v-if="datalist.length < 1">您的购物车为空</div> <table v-else> <caption> <h1>购物车</h1> </caption> <tr> <th></th> <th>名称</th> <th>数量</th> <th>价钱</th> <th>操作</th> </tr> <tr v-for="(item, index) in datalist" :key="item.id"> <td><input type="checkbox" v-model="item.checkbox" /></td> <td>{{ item.name }}</td> <td> <button @click="item.num--" class="num" :disabled="item.num <= 1"> -</button >{{ item.num }}<button @click="item.num++" class="num">+</button> </td> <td>{{ item.price }}</td> <td><a href="#" @click.prevent="del(index)">删除</a></td> </tr> <tr> <td colspan="5" align="right">总价:¥{{ totalPrice.toFixed(2) }}</td> </tr> </table> </div> </template> <script> export default { name: 'App', data() { return { datalist: [ { id: 1, checkbox: true, name: '《曾国藩的启示》', price: 58, num: 1 }, { id: 2, checkbox: true, name: '北京', price: 45, num: 1 }, { id: 3, checkbox: true, name: '天津', price: 28, num: 1 }, { id: 4, checkbox: true, name: '深圳', price: 100, num: 1 } ] } }, computed: { totalPrice: { get() { let sum = 0 for (const book of this.datalist) { if (book.checkbox === true) { sum += book.price * book.num } } return sum } } }, methods: { del(index) { this.datalist.splice(index, 1) } } } </script> <style lang="scss"> table { border-collapse: collapse; border-spacing: 0; } th { background: #ddd; border: 1px solid #ddd; padding: 5px; } td { border: 1px solid #ddd; padding: 5px; } .num { border: 1px solid #ddd; width: 20px; display: inline-block; text-align: center; cursor: pointer; } </style>