
index.html:
<body>
<div id="app">
<div v-if="books.length">
<table>
<thead>
<tr>
<th></th>
<th>书籍名称</th>
<th>出版日期</th>
<th>价格</th>
<th>购买数量</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in books">
<!-- <td v-for="value in item">{{value}}</td> -->
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.date}}</td>
<!-- 直接算 -->
<!-- <td>{{‘¥‘ + item.price.toFixed(2)}}</td> -->
<!-- 使用methods -->
<!-- <td>{{getFinalPrice(item.price)}}</td> -->
<!-- 使用过滤器 -->
<td>{{item.price | showPrice}}</td>
<td>
<!-- disabled 如果为true则不能再点击 -->
<button @click="decrement(index)" v-bind:disabled="item.count <= 1">-</button>
{{item.count}}
<button @click="increment(index)">+</button>
</td>
<td>
<button @click="removeHandle(index)">移除</button>
</td>
</tr>
</tbody>
</table>
<h2>总价格: {{totalPrice | showPrice}}</h2>
</div>
<div v-else>
<h2>购物车为空</h2>
</div>
</div>
<!-- 要用的一定要放在前面!!!! -->
<script src="../../js/vue.js"></script>
<script src="./main.js"></script>
</body>
main.js:
const app = new Vue({ el: ‘#app‘, data: { books: [ { id: 1, name: ‘book1‘, date: ‘2006-9‘, price: 10.00, count: 1 }, { id: 2, name: ‘book2‘, date: ‘2009-9‘, price: 20.00, count: 1 }, { id: 3, name: ‘book3‘, date: ‘2016-9‘, price: 30.00, count: 1 }, { id: 4, name: ‘book4‘, date: ‘2019-9‘, price: 40.00, count: 1 }, ] }, methods: { getFinalPrice(price){ return ‘¥‘ + price.toFixed(2); }, decrement(index){ // console.log("decrement"); this.books[index].count-- }, increment(index){ // console.log("increment"); this.books[index].count++ }, removeHandle(index){ this.books.splice(index, 1) } }, computed: { totalPrice(){ let totalPrice = 0; for(let i in this.books){ totalPrice += this.books[i].count * this.books[i].price; } return totalPrice; } }, filters: { showPrice(price){ return ‘¥‘ + price.toFixed(2); } } })
style.css:
table { border: 1px solid #e9e9e9; border-collapse: collapse; border-spacing: 0; } th, td{ padding: 8px 16px; border: 1px solid #e9e9e9; text-align: left; } th{ background-color: #f7f7f7; color: #5c6b77; font-weight: 600; }
原文:https://www.cnblogs.com/smallstars/p/13199697.html