IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue实现简易购物车 -> 正文阅读

[JavaScript知识库]Vue实现简易购物车

在这里插入图片描述

具体代码:

<!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>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        ul {
            list-style: none;
        }
        .main{
            width: 1200px;
            margin: 0 auto;
            margin-top: 50px;
        }
        .thead{
            height: 40px;
            line-height: 40px;
            border: 1px solid #333;
        }
        .thead ul,.tbody ul {
            display: flex;
            justify-content: space-evenly;
        }
        .thead ul li {
            text-align: center;
            flex: 1;
            border-right: 1px solid red;
        }
        .thead ul li:last-child{
            border-right: 0;
        }
        .tbody ul{
            border-bottom: 1px solid rgb(24, 24, 24);
        }
        .tbody ul li {
            text-align: center;
            flex: 1;
            line-height: 40px;
        }
        .tbody li span {
            user-select: none;
            cursor: pointer;
            display: inline-block;
            vertical-align: middle;
            width: 30px;
            height: 30px;
            line-height: 30px;
            font-size: 18px;
            font-weight: 400;
            background-color: rgb(214, 214, 214);
        }
        .tbody li span:active{
            background-color: rgb(192, 192, 192);
        }
        .tbody .count input{
            user-select: none;
            outline: none;
            width: 30px;
            height: 30px;
            text-align: center;
            cursor: not-allowed;
            margin: 0 14px;
        }
        .select{
            vertical-align: middle;
            width: 20px;
            height: 20px;
        }
        label{
            margin-left: 10px;
        }
        .nonum{
            cursor: not-allowed !important;
        }
        .nonum:active{
            background-color: rgb(214, 214, 214) !important;
        }
    </style>
</head>
<body>
    <div class="main" id="app">
        <div class="thead">
            <ul>
                <!-- 不用v-model 使用:checked 和 change 来结合 -->
                <li><input type="checkbox" class="select" :checked="allselect()" @change="callOff"><label>全选</label></li>
                <li>商品ID</li>
                <li>商品名称</li>
                <li>商品价格</li>
                <li>商品数量</li>
                <li>商品小计</li>
                <li>操作</li>
            </ul>
        </div>
        <div class="tbody">
            <ul v-for="(item,index) in arr" :key="item.id">
                 <!-- 不用v-model 使用:checked 和 change 来结合 -->
                <li><input type="checkbox" class="select" :checked="item.isSelect" @change="item.isSelect = !item.isSelect"></li>
                <li>{{item.id}}</li>
                <li>{{item.proName}}</li>
                <li>{{item.price}}</li>
                <li class="count">
                <span class="add" @click="add(item)">+</span>
                <input type="text" v-model="item.num" readonly >
                <!-- 如果当前的数量为1时(等于currentNum)添加类名nonum -->
                <span class="minus" @click="minus(item)" :class="{'nonum':currentNum == item.num}">-</span>
                </li>
                <li>{{item.num * item.price}}</li>
                <li><button @click="del(index)">删除</button></li>
            </ul>
        </div>
        <div>总价:{{getSum1.sum}} 总数:{{getSum1.allNum}}</div>
        <button @click="delSelect">删除选中</button>
        <button @click="invert">反选</button>
    </div>

    <script>
        new Vue({
            el: "#app",
            data:{
                arr:[
                    {
                        id: 1,
                        proName: "小米",
                        num: 5,
                        price: 1999
                    },
                    {
                        id: 2,
                        proName: "华为",
                        num: 6,
                        price: 2999
                    },
                    {
                        id: 3,
                        proName: "联想",
                        num: 7,
                        price: 3999
                    },
                    {
                        id: 4,
                        proName: "苹果",
                        num: 7,
                        price: 3999
                    }
                ]
                ,
                currentNum:1 //减到1的状态
            },
            methods:{
                add(item){
                   item.num++;
                },
                minus(item){
                    if(item.num == 1){
                        item.num = 1;
                    }else{
                        item.num--;
                    }
                },
                del(index){//单个删除
                    alert("删除"+this.arr[index].proName)
                    this.arr.splice(index,1)
                },
                allselect(){//全选的判读状态
                    return this.arr.every(val=>val.isSelect)
                },
                delSelect(){//删除选中
                    this.arr = this.arr.filter(val=>!val.isSelect)//删除选中就是过滤掉未选中的
                },
                callOff(){//取消全选
                    for(let i = 0; i < this.arr.length; i++){
                        this.arr[i].isSelect = !this.arr[i].isSelect
                    }
                },
                invert(){//反选
                    for(let i = 0; i < this.arr.length; i++){
                        if(this.arr[i].isSelect){
                            this.arr[i].isSelect = !this.arr[i].isSelect
                        }else{
                            this.arr[i].isSelect = !this.arr[i].isSelect
                        }
                    }
                }

            },
            computed:{
                getSum1(){//计算总计和总数
                    let selAll = this.arr.filter(val=> val.isSelect);
                    let sum = 0;
                    for(let i = 0; i < selAll.length; i++){
                        sum += selAll[i].num * selAll[i].price
                    }
                   
                    return {sum, allNum:selAll.length}
                }
                    
            },
            beforeCreate(){
            },
            create(){
            },
            beforeMount(){
            },
            mounted(){//获取数据后个每一项都添加选中状态
                this.arr.map(val=>{
                    this.$set(val,"isSelect",true)
                })
            },
            beforeUpdate(){
            },
            updated(){
            },
            beforeDestroy(){
            },
            destroyed(){
            },
            activated(){//激活状态
            },
            deactivated(){//离开状态
            }
        })
    </script>
</body>
</html>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:33:33  更:2021-07-25 11:35:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 11:17:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码