vue实现商品购物车全选反选

本文实例为大家分享了vue实现商品购物车全选反选的具体代码,供大家参考,具体内容如下

项目需求:

实现一个购物车
全选框实现对商家和商品的全选
商家全选框实现对当前商家所有商品的全选
取消其中一个商品则取消对应商家全选和全选框
选中一个商家下的所有商品则勾选对应商家的全选框,不勾选全选框
选中所有商品则勾选所有商家全选框和全选框

我的思路:

1、通过对数据的简单操作可实现更深层次的全选操作
2、vue.$set(object, key, value)给对象添加属性可以更新视图
3、通过es6的every判断数组中是否每个元素都满足条件,都满足返回true,有一个不满足则返回false

template:

<div class="box">
    <input type="checkbox" v-model="checkedAll" @change="checkAll"> 全选
</div>
<div class="list" style="margin-left:50px;" v-for="(val,k) in data" :key="k">
    <div class="box">
        <input type="checkbox" v-model="val.checked" @change="_checkAll(val)">
        {{val.seller}}
    </div>
    <ul v-for="(item,index) in val.goodsList" :key="index">
        <li>
            <input type="checkbox" v-model="item.checked" @change="handleCheck(item,index)">
            {{item.name}}
        </li>
    </ul>
</div>

scritpt层

var app = new Vue({
    el: "#app",
    data: {
        checkedAll: false, //控制是否全选
        data: [{
            seller: "商家1",
            goodsList: [{
                name: '商品1'
            }]
        }, {
            seller: "商家2",
            goodsList: [{
                name: '商品2'
            }, {
                name: '商品3'
            }]
        }] //数据
    },
    mounted() {
        this.data.forEach(item => {
            this.$set(item, "checked", false) //Vue 解决不能检测到对象属性的添加或删除
                // item.checked = false; //如果为真实数据直接设置的对象改变值不会更新视图
            if (item.goodsList) {
                item.goodsList.forEach((citem) => {
                    this.$set(citem, "checked", false)
                        // citem.checked = false;
                })
            }
        });
    },
    methods: {
        //全选
        checkAll() {
            this.data.forEach(item => {
                item.checked = this.checkedAll;
                if (item.goodsList) {
                    item.goodsList.forEach(citem => {
                        citem.checked = this.checkedAll;
                    })
                }
            })
        },
        //商家全选
        _checkAll(val, k) {
            val.goodsList.forEach(item => {
                item.checked = val.checked;
            });
            if (this.data.every(item => item.checked)) {
                this.checkedAll = true;
            } else {
                this.checkedAll = false;
            }

        },
        //商品选择框
        handleCheck(item, index) {
            var check = []; //保存中间层是否被选中的布尔值
            this.data.forEach((items, index) => {
                if (items.goodsList) {
                    var bool = items.goodsList.every(citem => citem.checked);
                    if (bool) {
                        items.checked = true;
                    } else {
                        items.checked = false;
                    }
                    check.push(bool);
                }
            })
            if (check.indexOf(false) == -1) {
                this.checkedAll = true;
            } else {
                this.checkedAll = false;
            }
        },
    }
})

效果如下

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解

    本文实例讲述了Vue+Node实现商品列表的分页.排序.筛选,添加购物车功能.分享给大家供大家参考,具体如下: 1.分页 商品列表的分页实现是后台根据前端请求的页面大小.页码位置,去数据库中查询指定位置的数据然后返回给前端.比如页面大小为8,要查第3页的数据,则跳过2*8条数据,然后返回接下来的8条数据. 实现滚动加载:页面刚一加载完成并不需要请求所有数据,只显示一部分.当用户下拉到页面底部时,再去请求数据并拼接到商品数据列表中.通过vue-infinite-scroll插件实现滚动加载,在框架

  • vue实现选择商品规格功能

    本文实例为大家分享了vue实现选择商品规格功能的具体代码,供大家参考,具体内容如下 要实现上图的效果,代码如下: <template>         <div class="popupSub">已选规格:{{showSelectSpec}}</div>           <div class="subItem" v-for="(item,index) in subItemList" :key=&quo

  • vue实现商品详情页功能之商品选项卡

    本文实例为大家分享了vue实现商品详情页功能之商品选项卡的具体代码,供大家参考,具体内容如下 用户点击商品进入商品详情页,默认显示第一个小图对应的大图,然后鼠标滑到小图上,大图也会发生改变,实现效果如下: 实现代码: shopitem.vue的template(HTML),上面是大图,下面是小图,鼠标滑动到小图上,触发getUrl事件(参数是小图的show属性,索引): item.json文件(我的数据文件,默认第一个小图的show为true,默认大图显示第一张.大图和小图的路径一样的,只是cs

  • vue实现商品多选功能

    本文实例为大家分享了vue实现商品多选功能的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <m

  • vue实现商品规格选择功能

    本文实例为大家分享了vue实现商品规格选择的具体代码,供大家参考,具体内容如下 动手之前要先确定自己的商品数据结构,下面是我的商品数据结构 dataInfo: {         attr: [           {             attr_name: "码数",             attr_value: [{attr: "40"}, {attr: "50"}],             attr_values: ["

  • Vue实现购物车的全选、单选、显示商品价格代码实例

    今天中午废了一会时间,总算把项目中的购物车的单选.全选.以及实现数据的动态显示做出来了,给小白分享一下我个人一个解决办法: 购物车的基本页面如下: 先说实现的总体思路 1.给table表中表头th加一个 checkbox,设这两个事件:@click="checkAll" v-model="checkall": 2.给对应的tr加一个 checkbox 绑定一个事件 v-model="checked",checked设为数组,专门放商品Id: 3.

  • vue商城中商品“筛选器”功能的实现代码

    在使用vue搭建商城项目的时候,要实现一个商品筛选器的功能,在完成之后,再一次被vue的数据驱动的强大感到震撼! 首先,我们来看一下具体的需求吧.你可以先看下面的这两张图,然后再看文字描述,可能会更容易理解. 没有触发时的状态 触发后的状态 我们需求有下面几点:        1.默认情况下,只显示一级菜单,二级菜单不显        2.存在二级菜单的情况下,在二级菜单没有显示的情况下,点击一级菜单,一级菜单的样式发生改变,二级菜单不显示        3.存在二级菜单的情况下,一级菜单已经点

  • vue实现商品购物车全选反选

    本文实例为大家分享了vue实现商品购物车全选反选的具体代码,供大家参考,具体内容如下 项目需求: 实现一个购物车全选框实现对商家和商品的全选商家全选框实现对当前商家所有商品的全选取消其中一个商品则取消对应商家全选和全选框选中一个商家下的所有商品则勾选对应商家的全选框,不勾选全选框选中所有商品则勾选所有商家全选框和全选框 我的思路: 1.通过对数据的简单操作可实现更深层次的全选操作2.vue.$set(object, key, value)给对象添加属性可以更新视图3.通过es6的every判断数

  • vue+vant实现购物车全选和反选功能

    本文实例为大家分享了vue+vant实现购物车全选和反选的具体代码,供大家参考,具体内容如下 这是效果图: 话不多少,直接上代码: <template> <div class="cart"> <div class="st-spacing-main" v-for="(item) in cartInfoList" :key="item.id"> <div class="st-it

  • AngularJS 实现购物车全选反选功能

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <!DOCTYPE html> <html lang="en" ng-app="testMo"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="css/bootstrap.css&qu

  • 利用Vue.js实现checkbox的全选反选效果

    前言 这篇文章主要是跟大家分享了利用Vue.js实现checkbox的全选反选效果,之前写的代码存在一个bug,就是当你选择全选的时候去掉后面的一个选项,再点全选结果就是反的了.后来很感谢朋友留言帮我改了这个问题嘻嘻,下面一起来看看具体是怎么实现的吧. html示例代码 <template> <div> <input type='checkbox' class='input-checkbox' v-model='checked' v-on:click='checkedAll'

  • vue使用监听实现全选反选功能

    最近在学习vue这一块的内容,在项目中用到了全选全不选的功能,开始的时候借鉴了别人写的功能,但感觉写的有一些缺陷,然后就自己写了一套,如有写的不好的地方,请各位大佬指教,废话不多说,上代码. 首先定义数据 data: { /*全选.全不选*/ allCheck:false,//全选功能 //循环数据 checkArr:[ {cityName:"东城区",isCheck:false}, {cityName:"西城区",isCheck:false}, {cityName

  • Vue常用的全选/反选的示例代码

    在Vue中执行CheckBox的全选反选有很多方法 我觉得最易懂,速度最快的方法就是这个! 首先就是自己创建一个input,正在mx.txt的前方添加一个input:CheckBox.在v-model加上你每次创建出来的mx.check 最重点就在于forEach遍历,出来的都是当前的. 有些人不注意的一点,为什么data里面没有check:[]这样的出现. data里的是实时监控,你点一次自动将所有的check都变成了true. <template> <div class="

  • AngularJS 购物车全选/取消全选功能的实现方法

    刚学习angularJS,于是练习写了一个类似于购物车的全选/取消全选的功能,主要实现的功能有: 1.勾选全选checkbox,列表数据全部被勾选,取消同理,用ng-model实现双向绑定: 2.选中列表中的所有checkbox,全选也会被勾选:(这里我想到的方法是给每一个对象增加checked字段,然后勾选触发echoChange()函数,用了一个cc变量计算当前checked为true的个数,然后再判断被勾选个数与数组长度是否相等,相等则证明全部被勾选,于是全选按钮也赋值为true;不知道还

  • vue.js实现的全选与全不选功能示例【基于elementui】

    本文实例讲述了vue.js实现的全选与全不选功能.分享给大家供大家参考,具体如下: elementui是有checkbox组件,不过问题在于checkbox组件内只能嵌套简单的字符串,如果要嵌入标签怎么办? 首先渲染页面: <el-checkbox v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox> <tbody v-for="item in o

  • 解决JQuery全选/反选第二次失效的问题

    最近在项目中,遇到一个问题,测试全选/反选功能时,第一次对母框进行选中/非选中时,能同步子框的全选/反选状态,之后再点击母框,子框就没反应了. 原代码大致结构关键如下: function selectAll(obj){ $('input[name="xxx[]"]').attr("checked",obj.checked); } <input type="checkbox" id="mother" name="

  • JQuery实现列表中复选框全选反选功能封装(推荐)

    我们在做列表的时候经常会遇到全选,反选进行批量处理问题,例如: 我当时就是简单的实现了,然后想封装到公共的js中,封装的太烂,不好意思贴出来了(就是把实现代码之间放到公共js中,然后每个页面都用固定的id,class,现在想想我都不好意思叫他封装了),然后想到之前老大有写过这个功能去看下他怎么写的,真是没有对比就没有伤害啊,这才叫封装: $(':checkbox[data-check-target]').click(function () { var target = $(this).attr(

随机推荐