vue购物车基本使用

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>
</head>

<body>
    <div id="app">
        <h2>商品列表</h2>
        <table border="1">
            <tr>
                <th>id</th>
                <th>图片</th>
                <th>商品名称</th>
                <th>价钱</th>
                <th>操作</th>
            </tr>
            <tr v-for="(g,k) in goods">
                <td>{{k+1}}</td>
                <td>
                    <img :src="g.img" width="100">
                </td>
                <td>{{g.goods_name}}</td>
                <td>{{g.price}}</td>
                <td>
                    <input @click="add(k)" type="button" value="添加购物车">
                </td>
            </tr>
        </table>

        <h2>已选商品</h2>
        <table border="1">
            <tr>
                <th>图片</th>
                <th>商品名称</th>
                <th>价格</th>
                <th>数量</th>
                <th>小计</th>
                <th>操作</th>
            </tr>
            <tr v-for="(c,k) in carts">
                <td>
                    <img :src="c.img" width="100">
                </td>
                <td>{{c.goods_name}}</td>
                <td>{{c.price}}</td>
                <td>
                    <input @click="count_add(k)" type="button" value="+"> {{c.count}}
                    <input @click="count_jian(k)" type="button" value="-">
                </td>
                <td>{{c.price * c.count}}</td>
                <td>
                    <input type="button"   @click = "remove(k)" value="删除">
                </td>
            </tr>
            <tr v-if="!carts.length">
                <td colspan="5" class="text-center">您的购物车空空如也..</td>
            </tr>
            <tr>
                <td colspan="4">总价:{{ totalPrice }}</td>
                <td colspan="2">
                    <input type="button" @click = "removeAll"  value="清空购物车">
                </td>
            </tr>
        </table>
    </div>


</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            // 总价钱
            // totalPrice: 1000,
            goods: [
                {
                    id: 1,
                    goods_name: "漂亮的裙子",
                    price: 100,
                    img: "./image/06.jpg",
                },
                {
                    id: 2,
                    goods_name: "空调",
                    price: 100,
                    img: "./image/06.jpg",
                },
                {
                    id: 3,
                    goods_name: "iPhone X",
                    price: 8999,
                    img: "./image/06.jpg",
                },
            ],
            // Uncaught TypeError:cannot read property 'length' of null 错误解决方法:
            // JSON.parse(localStorage.getItem('carts')) 一开始是空的  判断如果一开始有就执行 没有就为[]
            carts: localStorage.getItem('carts') ? JSON.parse(localStorage.getItem('carts')) : []
            // carts:[]
        },
        methods: {
            
            // 给按钮添加
            add: function (k) {
                // 先循环购物列表看是否有这个id
                for (var i = 0; i < this.carts.length; i++) {
                    // 判断如果有这件商品的就+1  
                    if (this.carts[i].id == this.goods[k].id) {
                        this.carts[i].count++;
                        // 如果没有就返回
                        return;
                    }

                }

                // 把列表中数据添加到已选着的购物车中
                this.carts.push({
                    id: this.goods[k].id,
                    goods_name: this.goods[k].goods_name,
                    price: this.goods[k].price,
                    img: this.goods[k].img,
                    count: 1,
                })
                // 保存到浏览器中
                localStorage.setItem('carts', JSON.stringify(this.carts))
            },
            // 让数量+1 
            count_add: function (k) {
                this.carts[k].count++;
                // 保存到浏览器中
                localStorage.setItem('carts', JSON.stringify(this.carts))
            },
            // 让数量-1
            count_jian: function (k) {
                // 解决减负数的问题
                if (this.carts[k].count == 1) {
                    if (confirm("你确定要删除吗?")) {
                        this.carts.splice(k, 1);
                    }
                }
                else {
                    this.carts[k].count--;
                }
                localStorage.setItem('carts', JSON.stringify(this.carts))
            },
            // 删除一条 
            remove:function(k){
                // this.carts[k].count = 0;
                localStorage.removeItem('carts', JSON.stringify(this.carts.splice(k,1)));
                localStorage.getItem('carts')
            },
            // 删除所有
            removeAll:function(){
                localStorage.removeItem('carts');
                localStorage.setItem('carts', JSON.stringify(this.carts=[]));
            }
        },
        computed:{
            // 总价
            totalPrice (){
                let sum = 0
				// 循环计算总价
				for(let i=0;i<this.carts.length;i++){
					if( this.carts[i] )
					{
						sum += this.carts[i].price * this.carts[i].count
					}
				}
				// 返回(JS小数运算会出问题:toFixed)
				return sum.toFixed(2)
            }
        }
       
    });
</script>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值