vue实现一个购物车(简洁易懂)

人生之路不会是一帆风顺的,我们会遇上顺境,也会遇上逆境,在所有成功路上折磨你的,背后都隐藏着激励你奋发向上的动机,人生没有如果,只有后果与结果,成熟,就是用微笑来面对一切小事。

导读:本篇文章讲解 vue实现一个购物车(简洁易懂),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

<template>
    <div class="car">
        <ul>
        <h3 style="text-align:center;">购物车</h3>
            <input type="checkbox" @click="f_selectAll()" :checked="checkedAll" class="checkall">全选
            <li v-for="(item,index) in goods" :key="index" >
                <input type="checkbox" @click="f_select(item)" :checked="item.choose">
                <div style="background-color:red">
                    <p>{{item.name}}</p>
                    <p @click="f_add(item)">+</p>
                    <p>{{item.count}}</p>
                    <p @click="f_minus(item)">-</p>
                    <p>{{item.price}}元</p>
                </div>
                <el-button class="del" @click="f_delect(item,index)" type="primary">删除</el-button>
            </li>
            <p style="background-color:aqua;height:70px">总价:{{total}}元</p>
        </ul>
   </div>
</template>


<script>
    export default{
        name:"Car",
        data(){
            return{
                total:0,
                checkedAll:false,
                goods:[
                    {
                        name:'苹果',
                        price:1,
                        count:1,
                        choose:false
                    },
                    {
                        name:'梨',
                        price:5,
                        count:1,
                        choose:false
                    },
                    {
                        name:'香蕉',
                        price:20,
                        count:1,
                        choose:false
                    },
                    {
                        name:'西瓜',
                        price:10,
                        count:1,
                        choose:false
                    },
                    {
                        name:'橘子',
                        price:2,
                        count:1,
                        choose:false
                    }
                ]
            }
        },
        methods:{
            //全选
            f_selectAll(){
                this.checkedAll=!this.checkedAll
                if(this.checkedAll){
                    this.total=0  //全选之前把total设置为空
                    this.goods.forEach(item => {
                        item.choose=true
                        this.total+=item.price*item.count//计算全部商品合计价格
                    });
                }else{
                    this.goods.forEach(item => {
                        item.choose=false
                    });
                    this.total=0//取消全选后要把购物车总数据清空
                }
            },

            //选中
            f_select(item){
                item.choose=!item.choose
                if(item.choose){
                    this.total+=item.price*item.count
                }else{
                    this.total-=item.price*item.count
                }
                //判断全选
                this.checkedAll=this.goods.every(item => item.choose)//加上这个判断,当我每个商品都选中时,全选按钮就会自动打钩
            },

            //数量增加
            f_add(item){
                item.count+=1
                if(item.choose){//判断是否选中
                    this.total+=item.price
                }
            },

            //数量减少
            f_minus(item){
                if(item.count==1){
                    alert('数量不能小于1')
                    return false
                }
                item.count-=1
                if(item.choose){//判断是否选中
                    this.total-=item.price
                }
            },

            //删除
            f_delect(item,index){
                if(item.choose){
                    item.choose=false
                    this.total-=item.price*item.count
                }
                this.goods.splice(index,1)//直接删掉一行商品数据
            },
        }
    }
</script>


<style lang="scss" scoped>
    .car{
 
        ul{
            background-color: #fff;
            border: 4px solid red;
            padding: 20px;
            width: 50%;
            margin: 0 auto;
        }
        li{
            border: 3px solid skyblue;
            display: flex;
            padding: 10px 0;
            div{
                margin-left: 20px;
                display: flex;
                width: 300px;
                cursor: pointer;
                p{
                    width: 50px;
                    margin-left: 20px;
                    
                }
            }
        }
    }
</style>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/126787.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!