購物車
摘要:
index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>購物車示例</title>
...
index.html:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>購物車示例</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div id="app" v-cloak> <template v-if="list.length"> <thead> <tr> <th></th> <th>商品名稱</th> <th>購買單價</th> <th>購買數量</th> <th>操作</th> </tr> </thead> <tbody> <tr v-for="(item, index) in list"> <td>{{ index + 1 }}</td> <td>{{ item.name }}</td> <td>{{ item.price }}</td> <td> <button @click="handleReduce(index)" :disabled="item.count === 1">-</button> {{ item.count }} <button @click="handleAdd(index)">+</button> </td> <td> <button @click="handleReduce(index)">移除</button> </td> </tr> </tbody> <div>總價: $ {{ totalPrice }}</div> </template> <div v-else>購物車為空</div> </div> <script src="https://unpkg.com/vue/dist/vue.min.js"></script> <script src="index.js"></script> </body> </html>
index.js:
var app = new Vue ({ el: '#app', data: { list: [ { id: 1, name: 'iPhone x', price: 6799, count: 1 }, { id: 2, name: 'iPad+Pro/">iPad Pro', price: 9999, count: 1 }, { id: 3, name: 'MacBkko Pro', price: 25999, count: 1 } ], a: 5 }, computed: { totalPrice: function () { var total = 0; for (var i = 0; i < this.list.length; i++) { var item = this.list[i]; total += item.price * item.count; } return total.toString().replace(/\B(?=(\d{3})+$)/g,','); } }, methods: { handleReduce: function (index) { if (this.list[index].count === 1) return; this.list[index].count--; }, handleAdd: function (index) { this.list[index].count++; }, handleRemove: function () { this.list.splice(index, 1); } } })
style.css:
[v-cloak] { disPlay: none; } table { border: 1px solid #e9e9e9; border-collapse: collapse; border-spacing: 0; empty-cells: show; } th,td { padding: 8px 16px; border: 1px solid #e9e9e9; text-align: left; } th { background: #f7f7f7; color: #5c6b77; font-weight: 600; white-space: nowrap; }