美文网首页
《Vue.js实战》学习笔记

《Vue.js实战》学习笔记

作者: 863cda997e42 | 来源:发表于2020-04-27 15:39 被阅读0次

Vue.js实战

第5章购物车示例

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>购物车示例</title>
    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
    <style>
        [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-color: #f7f7f7;
            color: #5c6b77;
            font-weight: 600;
            white-space: nowrap;
        }
    </style>
</head>

<body>
    <div id="app" v-cloak>
        <template v-if="list.length">
            <table>
                <thead>
                    <tr>
                        <th></th>
                        <th>商品名称</th>
                        <th>商品价格</th>
                        <th>购买数量</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for="(item, index) of list">
                        <td> {{index + 1}} </td>
                        <td> {{item.name}} </td>
                        <td> &yen;{{item.price}} </td>
                        <td>
                            <button @click="handleReduce(index)" :disabled='item.count === 1'>-</button>
                            {{item.count}}
                            <button @click="handleAdd(index)">+</button>
                        </td>
                        <td>
                            <button @click="handleRemove(index)">移除</button>
                        </td>
                    </tr>
                </tbody>
            </table>
            <div>总价:&yen;{{totalPrice}}</div>
        </template>
        <div v-else>购物车为空</div>
    </div>
    <script>
        var myData = {
            list: [
                { id: 1, name: '27 英寸 iMac', price: 13832, count: 1 },
                { id: 2, name: '21.5 英寸 iMac', price: 8390, count: 1 },
                { id: 3, name: '13 英寸 MacBook pro', price: 9999, count: 1 },
                { id: 4, name: '16 英寸 MacBook pro', price: 18999, count: 1 },
                { id: 5, name: '11 英寸 iPad Pro', price: 6229, count: 1 },
                { id: 6, name: '12.9 英寸 iPad Pro', price: 7899, count: 1 },
                { id: 7, name: 'iPhone SE', price: 3299, count: 1 },
                { id: 8, name: 'iPhone 11', price: 5499, count: 1 },
                { id: 9, name: 'iPhone 11 Pro', price: 8699, count: 1 },
                { id: 10, name: 'iPhone 11 Pro Max', price: 9599, count: 1 }
            ]
        };
        var app = new Vue({
            el: "#app",
            data: myData,
            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 (index) {
                    this.list.splice(index, 1);
                }

            },
        });
    </script>
</body>

</html>
截屏2020-04-27 下午3.24.16.png

参考苹果官网的设备价格。

相关文章

网友评论

      本文标题:《Vue.js实战》学习笔记

      本文链接:https://www.haomeiwen.com/subject/pxzywhtx.html