• vue-购物车


    最终的实现效果:

    需求分析:

    购物车需要展示一个已加入购物车的商品列表,包含商品名称,商品单价,购买数量和操作等信息,还需要实时显示购买的总价。其中购买数量可以增加或减少,每类商品还可以从购物车中移除。

    一:创建一个根元素来挂载Vue实例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>购物车</title>
       
    </head>
    <body>
    <div id="app" v-cloak>
        
    </div>
    
    <script src="vue.min.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                
            }
        })
    </script>
    </body>
    </html>

    这里将vue.min.js写在<body>的底部,如果写在<head>里,Vue实例将无法创建,因为此时DOM还没有被解析完成。

    二:

    将界面渲染出来

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>购物车</title>
        <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: center;
            }
            th{
                background: #f7f7f7;
                color: #5c6b77;
                font-weight: bold;
                white-space: nowrap;
            }
        </style>
    </head>
    <body>
    <div id="app" v-cloak>
        <table >
            <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>-</button>
                    {{item.count}}
                    <button>+</button>
                </td>
                <td>
                    <button>移除</button>
                </td>
            </tr>
            </tbody>
        </table>
    </div>
    
    <script src="vue.min.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                list:[
                    {id:1,name:"huawei",price:2199,count:1},
                    {id:2,name:"MI",price:199,count:1},
                    {id:3,name:"yijia",price:1199,count:1},
                    {id:4,name:"meizu",price:1299,count:1}
                ]
            }
        })
    </script>
    </body>
    </html>

    这一步可以将表格渲染出来,接下来开始操作功能

    三:

    增加和减少商品数量

    <td>
        <button @click="handleReduce(index)">-</button>
         {{item.count}}
        <button @click="handleAdd(index)">+</button>
    </td>
                handleReduce:function (index) {
                    this.list[index].count--;
                },
                handleAdd:function (index) {
                    this.list[index].count++;
                }

    当数量为0的时候,不再减少,可以按钮还需要这样:

    <button @click="handleReduce(index)" :disabled="item.count === 0">-</button>

    移除功能:

    <button @click="handleRemove(index)">移除</button>
    
    handleRemove:function (index) {
        this.list.splice(index,1)
    }

    四:

    再做一个总价得功能

    <div>{{totalPrice}}</div>
            computed:{
                totalPrice:function () {
                    var sunm=0;
                    for(var i=0;i<this.list.length;i++){
                        sunm+=this.list[i].count*this.list[i].price
                    }
                    return sunm
                }
            }

    基本实现

    源码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>vue</title>
    <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: center;
        }
        th{
            background: #f7f7f7;
            color: #5c6b77;
            font-weight: bold;
            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) 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="handleRemove(index)">移除</button>
                        </td>
                    </tr>
                </tbody>
            </table>
            <div>总价:${{ totalPrice }}</div>
        </template>
        <div v-else>购物车为空</div>
    </div>
    <script src="vue.min.js"></script>
    <script>
     var app = new Vue({
         el:"#app",
         data:{
            list:[
                {id:1,name:'iphone',price:6188,count:1},
                {id:2,name:'iphone7',price:6188,count:1},
                {id:3,name:'iphone8',price:6188,count:1},
                {id:4,name:'iphone9',price:6188,count:1}
            ]
         },
         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>
  • 相关阅读:
    BZOJ 3053 The Closest M Points
    Python 语言介绍
    计算机组成与操作系统基础
    Gym 100818I Olympic Parade(位运算)
    Codeforces 602B Approximating a Constant Range(想法题)
    Codeforces 599D Spongebob and Squares(数学)
    Codeforces 599C Day at the Beach(想法题,排序)
    ZOJ 3903 Ant(数学,推公示+乘法逆元)
    ZOJ 3911 Prime Query(线段树)
    UVALive 6910 Cutting Tree(离线逆序并查集)
  • 原文地址:https://www.cnblogs.com/QianBoy/p/7953645.html
Copyright © 2020-2023  润新知