vue3仿写简易购物车

这是一个按着千锋kerwin老师的视频写的简易购物车,用vue3写的,软件用vscode,详细视频资源见链接

引入vue3的地址

   <script type="text/javascript" src="https://unpkg.com/vue@next"> </script>

调整整体页面格式

    <style>
        /* 使得能够排在一行上 */
        li {
            display:flex;
            justify-content:space-around;
            padding:10px;
        }
        li img{
            width:100px;
        }
    </style>

该图片来自于百度

 pic:"https://ts1.cn.mm.bing.net/th/id/R-C.0c8bf36e099654aadaf5f127ef1a3f1b?rik=uHrB%2blGez03%2fAA&riu=http%3a%2f%2fi3.img.969g.com%2fdown%2fimgx2014%2f10%2f24%2f289_102445_a1cff.jpg&ehk=EeF%2fioqRM6NfQqkCgXw%2bwLvO1%2fxZgeZ2pof7ALNLGsg%3d&risl=&pid=ImgRaw&r=0"

用sum()方法计算总金额

                sum(){
                    var total = 0
                    // 累加计算checkList数组的每一项的 价格*数量
                    
                    this.checkList.forEach(item=>{
                        total+=item.price*item.number
                    })
                    return total
                },

控制删除

                handleDeleteClick(index,id){
                    // console.log(index)
                    //删除的是datalist功能 靠index
                    this.datalist.splice(index,1)
                    //删除checklist 靠id
                    // console.log(id)
                    this.checkList = this.checkList.filter(item=>item.id!==id)
                    //为删除同步一下状态
                    this.handleItemChecked()
                },

写全选方法

                handleAllCheck(){
                    // console.log(this.isAll)
                    if(this.isAll){
                        this.checkList = this.datalist
                    }else{
                        this.checkList=[]
                    }
                },

最终代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <link href="" rel="stylesheet">
    <style>
        /* 使得能够排在一行上 */
        li {
            display:flex;
            justify-content:space-around;
            padding:10px;
        }
        li img{
            width:100px;
        }
    </style>
    <script type="text/javascript" src="https://unpkg.com/vue@next"> </script>
</head>
<body>
    <div id="box">
        <input type = "checkbox" v-model="isAll" @change="handleAllCheck">全选/全不选
        <ul>
            <li v-for="(item,index) in datalist" :key="item.id">
            <input type="checkbox" v-model="checkList" :value="item" @change="handleItemChecked">
            <img :src="item.pic">

            <div>
                <div>{
   
   {item.name}}</div>
                <div style="color:red;">${
   
   {item.price}}</div>
            </div>
            <div>
                <button @click="item.number--" :disabled="item.number===1">-</button>
                <span>{
   
   {item.number}}</span>
                <button @click="item.number++" :disabled="item.number===item.limit">+</button>
            </div>
            <div>
                <button @click="handleDeleteClick(index,item.id)">删除</button>
            </div>

            </li>
        </ul>
        <div>总金额:{
   
   {sum()}}</div>
        {
   
   {checkList}}
    </div>
    <script type="text/javascript">
        var obj={
            data(){
                return {
                    isAll:false,
                    checkList:[], //勾选的购车的数据
                    datalist: [{
                        name: "商品1",
                        price:10,
                        number:1,
                        id:1,
                        limit:5,
                        pic:"https://ts1.cn.mm.bing.net/th/id/R-C.0c8bf36e099654aadaf5f127ef1a3f1b?rik=uHrB%2blGez03%2fAA&riu=http%3a%2f%2fi3.img.969g.com%2fdown%2fimgx2014%2f10%2f24%2f289_102445_a1cff.jpg&ehk=EeF%2fioqRM6NfQqkCgXw%2bwLvO1%2fxZgeZ2pof7ALNLGsg%3d&risl=&pid=ImgRaw&r=0"
                    },
                    {
                        name: "商品2",
                        price:20,
                        number:2,
                        id:2,
                        limit:15,
                        pic:"https://ts1.cn.mm.bing.net/th/id/R-C.0c8bf36e099654aadaf5f127ef1a3f1b?rik=uHrB%2blGez03%2fAA&riu=http%3a%2f%2fi3.img.969g.com%2fdown%2fimgx2014%2f10%2f24%2f289_102445_a1cff.jpg&ehk=EeF%2fioqRM6NfQqkCgXw%2bwLvO1%2fxZgeZ2pof7ALNLGsg%3d&risl=&pid=ImgRaw&r=0"
                    },
                    {
                        name: "商品3",
                        price:30,
                        number:3,
                        id:3,
                        limit:15,
                        pic:"https://ts1.cn.mm.bing.net/th/id/R-C.0c8bf36e099654aadaf5f127ef1a3f1b?rik=uHrB%2blGez03%2fAA&riu=http%3a%2f%2fi3.img.969g.com%2fdown%2fimgx2014%2f10%2f24%2f289_102445_a1cff.jpg&ehk=EeF%2fioqRM6NfQqkCgXw%2bwLvO1%2fxZgeZ2pof7ALNLGsg%3d&risl=&pid=ImgRaw&r=0"
                    },              
                ]
                }
            },
            methods:{
                sum(){
                    var total = 0
                    // 累加计算checkList数组的每一项的 价格*数量
                    
                    this.checkList.forEach(item=>{
                        total+=item.price*item.number
                    })
                    return total
                },
                handleDeleteClick(index,id){
                    // console.log(index)
                    //删除的是datalist功能 靠index
                    this.datalist.splice(index,1)
                    //删除checklist 靠id
                    // console.log(id)
                    this.checkList = this.checkList.filter(item=>item.id!==id)
                    //为删除同步一下状态
                    this.handleItemChecked()
                },
                //全选方法
                handleAllCheck(){
                    // console.log(this.isAll)
                    if(this.isAll){
                        this.checkList = this.datalist
                    }else{
                        this.checkList=[]
                    }
                },
                //每项选择
            handleItemChecked(){
                if(this.checkList.length===this.datalist.length){
                    // console.log("全选")
                    this.isAll = true;
                }
                else{
                    // console.log("未全选")
                    this.isAll = false;
                }
            }
            }
        }
      var vm = Vue.createApp(obj).mount("#box")
    </script>
</body>
</html>

此为学习模仿代码,参照千锋kerwin老师视频所写,链接为: 【千锋web前端开发项目教程_1000集完全零基础入门HTML5+CSS3+JS到精通(资料含前端学习路线图)-哔哩哔哩】 https://b23.tv/dJqyfv1

猜你喜欢

转载自blog.csdn.net/m0_65380423/article/details/127974084