vue实现简单添加购物

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>购物车</title>
    <script src="vue.js"></script>
</head>
<style>
    .list-box {
         500px;
        height: 600px;
        border: 2px solid blue;
        float: left;
        overflow: hidden;
    }

    h2 {
        font-size: 36px;
        text-align: center;
        color: blueviolet;
    }

    .list {
         100%;
        height: 500px;
        border-top: 2px solid black;
        font-size: 24px;
        color: purple;
    }

    .item {
        float: left;
        margin-left: 20px;
        margin-bottom: 20px;
    }

    .img {
         200px;
        height: 200px;
        background: red;

    }

    .desc {
         200px;
        height: 30px;
        margin-left: 30px;

    }

    .car-box {
         500px;
        border: 2px solid red;
        height: 600px;
        float: left;
        margin-left: 100px;
    }

    table {
         100%;
        text-align: center;
        font-size: 24px;
        color: black;
        font-weight: 500;
        overflow: hidden;
        position: relative;
    }

    button {
        font-size: 20px;
        background: purple;
    }

    .zuo {
        float: left;
    }

    .you {
        float: right;
    }
</style>

<body>
    <div id="app">
        <div class="list-box">
            <h2>商品列表</h2>
            <div class="list">
                <div class="item" v-for="v in lists">
                    <div class="img" :style="{background:'url('+v.imgage+') no-repeat center center/cover'}">
                    </div>

                    <div class="desc">
                        <span>{{v.name}}</span>
                        <span>{{v.price|currency("  ")}}</span>
                        <button @click="buy(v)">购买</button>
                    </div>
                </div>
            </div>
        </div>
        <div class="car-box">
            <h2>购物车</h2>
            <table border="1">
                <tr>
                    <th>名称</th>
                    <th>单价</th>
                    <th>数量</th>
                    <th>总价</th>
                    <th>操作</th>
                </tr>
                <tr v-for="(v,i) in car">
                    <td>{{v.name}}</td>
                    <td>{{v.price|currency("")}}</td>
                    <td>
                        <button class="you" @click="v.num++">+</button>
                        <div>{{v.num}}</div>
                        <button class="zuo" @click='jian(v,i)'>-</button>
                    </td>
                    <td>{{v.price*v.num|currency("")}}</td>
                    <td>
                        <button @click="del(i)">dell</button>
                    </td>
                </tr>
            </table>
            <div class="price">
                总价 {{total|currency}}
            </div>
        </div>
    </div>
    <script>
        Vue.filter('currency', function (value = '0', currencyType = '¥', limit = 2) {
            let res;
            value = value.toFixed(limit);
            let prev = value.toString().split('.')[0]; //获取整数部分
            let next = value.toString().split('.')[1];
            res = prev.toString().replace(/(d)(?=(?:d{3})+$)/g, '$1,') + '.' + next;
            return currencyType + res
        })
        var vm = new Vue({
            el: "#app",
            data: {
                lists: [
                    { id: 1000, name: "葡萄", price: 12, imgage: 'img/0.jpg' },
                    { id: 1001, name: "樱桃", price: 16, imgage: 'img/1.jpg' },
                    { id: 1002, name: "草莓", price: 20, imgage: 'img/2.jpg' },
                    { id: 1003, name: "橙子", price: 6, imgage: 'img/3.jpg' }
                ],
                car: []
            },
            computed: {
                total: function () {
                    var sum = 0;
                    for (var i = 0; i < this.car.length; i++) {
                        sum += this.car[i].price * this.car[i].num;
                    }
                    return sum;
                }
            },
            methods: {
                buy: function (v) {
                    var flag = true;
                    for (var i = 0; i < this.car.length; i++) {
                        if (this.car[i].name == v.name) {
                            flag = false;
                            this.car[i].num += 1;
                        }
                    }
                    if (flag) {
                        this.car.push({
                            name: v.name,
                            price: v.price,
                            num: 1
                        })
                    }
                },
                jian: function (v, i) {
                    v.num--;
                    if (v.num == 0) {
                        this.car.splice(i, 1)
                    }
                },
                del: function (i) {
                    this.car.splice(i, 1)
                }
            }
        })
    </script>
</body>

</html>

  

原文地址:https://www.cnblogs.com/aloneindefeat/p/10831400.html