VUE简易购物车程序

目录

效果预览图

完整代码


效果预览图

完整代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>购物车</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        table{
            width: 700px;
            border-collapse: collapse;
            margin: 50px auto;
        }
        tr{
            height: 50px;
        }
        th{
            background: #eee;
        }
        td{
            text-align: center;
        }
    </style>
</head>
<body>
    <div id="app">
        <table border="1">
            <tr>
                <th><input type="checkbox" v-model="qx" @change="aa" ></th>
                <th>序号</th>
                <th>书名</th>
                <th>单价</th>
                <th>数量</th>
                <th>总价</th>
                <th>操作</th>
            </tr>
            <tr v-for="(item,index) in arr">
                <td><input type="checkbox" v-model="item.bol" @change="qx2"></td>
                <td>{{index}}</td>
                <td>{{arr[index].name}}</td>
                <td>{{arr[index].dj}}</td>
                <td><button @click="zj(index)">+</button>{{arr[index].num}}<button @click="js(index)">-</button></td>
                <td>{{arr[index].dj*arr[index].num}}</td>
                <td><button @click="sc(index)">删除</button></td>
            </tr>
            <tr>
                <td>总价</td>
                <td colspan="6">{{total}}</td>
            </tr>
        </table>
    </div>
</body>
</html>
<script type="module">
import {createApp} from './js/vue.esm-browser.js';
createApp({
    data() {
        return {
            arr:[
                {name:'我在精神病院学斩神',dj:'39',num:1, bol:true},
                {name:'诛仙',dj:'59',num:1, bol:true},
                {name:'剑来',dj:'39',num:1, bol:true},
                {name:'雪中悍刀行',dj:'49',num:1, bol:true},
                {name:'大奉打更人',dj:'59',num:1, bol:true},
                {name:'完美世界',dj:'49',num:1, bol:true},
                {name:'仙逆',dj:'29',num:1, bol:true},
            ],
            qx:true,
        }
    },
    methods: {
        zj(index){
           this.arr[index].num+=1
        },
        js(index){
           this.arr[index].num-=1
           if (this.arr[index].num<1) {
            this.arr[index].num=1
            alert('每件商品最少要买一件')
           }
        },
        sc(index){
            this.arr.splice(index,1)
            this.qx2()
        },
       qx2(){
            let n = 0
            this.arr.forEach((item,index)=>{
                if (item.bol) {
                    n+=1;
                }
            })
            if (n == this.arr.length) {
                this.qx = true;
            }else if (n != this.arr.length){
                this.qx = false
                console.log(this.qx);
            }
        },
      aa(){
        if (this.qx==false) {
            this.arr.forEach((item,index)=>{
                    item.bol = false
                })
        }
      }
        
    },
    computed:{
        total(){
            let t = 0;
            this.arr.forEach((item,index)=>{
                if(item.bol){
                    t += item.num*item.dj;
                }
            });
            return t;
        },
    },
    watch:{
        qx(newVal,oldVal){
            if (newVal) {
                this.arr.forEach((item,index)=>{
                    item.bol = true
                })
            }
      }
    }
}).mount('#app')
</script>
相关推荐
J总裁的小芒果3 分钟前
THREE.js 入门(六) 纹理、uv坐标
开发语言·javascript·uv
m0_548514774 分钟前
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
java·前端·javascript
AndrewPerfect5 分钟前
xss csrf怎么预防?
前端·xss·csrf
Calm5508 分钟前
Vue3:uv-upload图片上传
前端·vue.js
浮游本尊12 分钟前
Nginx配置:如何在一个域名下运行两个网站
前端·javascript
m0_7482398312 分钟前
前端bug调试
前端·bug
m0_7482329215 分钟前
[项目][boost搜索引擎#4] cpp-httplib使用 log.hpp 前端 测试及总结
前端·搜索引擎
新中地GIS开发老师20 分钟前
《Vue进阶教程》(12)ref的实现详细教程
前端·javascript·vue.js·arcgis·前端框架·地理信息科学·地信
漫天转悠21 分钟前
Vue3中404页面捕获(图文详情)
vue.js
m0_7482495423 分钟前
前端:base64的作用
前端