vue项目两级全选(多级原理也一样),感觉有点意思,随手一记
需求:
首先说一下思路:我首先把数据列表两级遍历了一下,增加了一个checked属性来控制勾选和不勾线
- this.productList.forEach((item)=>{
- this.$set(item,"checked",false);
- item.goodList.forEach((subItem)=>{
- this.$set(subItem,"checked",false);(我这里用$set,添加属性,
因为vue是数据挟持的原理,他通过Object.defineProperty来监听属性的变化,我防止层级太深,
属性变化vue监听不到(或者监听到了dom渲染不了),如果监听到了你可以不加,加了肯定是对的)- })
- })
页面结构
- <div>
- <p>
- <span class="checkSpan"><input type="checkbox" v-model="checkAll" @change="selectAll"><label></label>全选</span></p>
- <div class="itemSection" v-for="(item,index) in productList">
- <div class="item-top">
- <span class="checkSpan"><input type="checkbox" v-model="item.checked" @change="selectItem1(item,productList)"><label></label>{{item.typeName}}</span>
- </div>
- <div class="subItemSection">
- <div class="subItem" v-for="(subItem,subIndex) in item.goodList">
- <div class="">
- <span class="checkSpan"><input type="checkbox" v-model="subItem.checked" @change="selectItem2(item,productList)"><label></label>{{subItem.goodName}}</span></div>
- </div>
- </div>
- </div>
- </div>
以下步骤是建立在你把数据循环遍历加了一个checked属性的基础上实现的
1第一步全选 checkAll:false,
- selectAll(){
- this.productList.forEach(item=>{
- item.checked=this.checkAll;
- item.goodList.forEach(subItem=>{
- subItem.checked=this.checkAll;
- })
- })
- },//定一个变量,你通过全选的变量来递归让所有的数据勾选或不勾选
2第二步
- selectItem1(item,productList){
- let firstItem=productList.every(item=>{
- return item.checked==true;
- }) //这步所有的一级,度勾选控制全选勾选
- if(firstItem){
- this.checkAll=true;
- }else{
- this.checkAll=false;
- }
- item.goodList.forEach(subItem=>{
- subItem.checked=item.checked;
- })//控制二级的勾选
- },
3这里都是针对的都是当前的二级
- selectItem2(item,productList){
- let lengths=item.goodList.length;
- let checkeds=item.goodList.filter(subItem=>{
- return subItem.checked==true;
- });
- if(lengths==checkeds.length){
- item.checked=true;//2级勾选的数量和二级的数量相同,让一级勾选
- let firstItem=productList.every(item=>{
- return item.checked==true;
- })//所有二级勾选控制一级勾选,然后让全选勾选,或者不勾选
- if(firstItem){
- this.checkAll=true;
- }else{
- this.checkAll=false;
- }
- }else{
- item.checked=false;
- this.checkAll=false;
- }
- },
- chooseProduct(){
- this.saveSelectProduct=[];
- this.productList.forEach(item=>[
- item.goodList.forEach(subItem=>{
- if(subItem.checked==true){
- this.saveSelectProduct.push({
- goodName:subItem.goodName,
- goodId:subItem.id
- })
- }
- })
- ]);
- this.productVisible=false;
- let productNameList=this.saveSelectProduct.map(item=>{
- return item.goodName
- })
- this.ruleForm.productJson=productNameList.toString();
- },
上面是拿到所有勾选的值,然后该干嘛干嘛
vue项目两级全选(多级原理也一样),感觉有点意思,随手一记的更多相关文章
- VUE实现简单的全选/全不选
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- vue实现商品购物车全选与全不选项目实战
项目需求: 实现一个购物车 全选框实现对商家和商品的全选 商家全选框实现对当前商家所有商品的全选 取消其中一个商品则取消对应商家全选和全选框 选中一个商家下的所有商品则勾选对应商家的全选框,不勾选全选 ...
- vue中的checkbox全选和反选
前几天有个博客园的朋友问小颖,小颖之前写的vue2.0在table中实现全选和反选 .Vue.js实现checkbox的全选和反选,为什么他将里面的js复制下来,但是实现不了全选和反选.小颖当时看他 ...
- 第八十二篇:Vue购物车(三) 实现全选功能
好家伙, 继续完善购物车相应功能 1.如何实现全选和反全选 1.1.全选框的状态显示(父传子) 来一波合理分析: 在页面中,有三个商品中 三个商品中的第二个未选择, 我么使用一个计算属性(fullSt ...
- vue day7 table checkbox 全选
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- vue实现简单的全选、反选、不选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue的el-select标签全选以及出现需要有禁用选项
首先说一下遇到这种问题的解决思路吧,很简单先去https://element.eleme.cn/#/zh-CN 这个官网上找到对应的需求,然后就是拼接数据的问题. 以下是全选的例子: <el-s ...
- vue+vant 购物车的全选和反选
https://blog.csdn.net/wjswangjinsheng/article/details/91392694
- vue 项目 多选 问题
近期 vue 项目用到多选功能,引用的elementUI的级联多选 Cascader,但是没有效果. 后来发现是elementUI版本问题,我们项目用的是2.7.2版本,版本太低. 后来 卸载了 重新 ...
随机推荐
- VMare Workstation 12 安装 AsteriskNow freePBX
一.准备工作 VMware 12 安装好的电脑 AsteriskNow iso文件 官网地址 https://www.asterisk.org/downloads 本人提供相关分享:https:// ...
- Python课程第三天作业
一.统计⽂件数据中出现的的所有字符与该字符出现的个数(不区分⼤⼩写,标点与空格也算) ⽂件内容: hello friend, can you speak English! # 结果: { 'h': 1 ...
- redis在实践中的一些常见问题以及优化思路
1.fork耗时导致高并发请求延时 RDB和AOF的时候,其实会有生成RDB快照,AOF rewrite,耗费磁盘IO的过程,主进程fork子进程 fork的时候,子进程是需要拷贝父进程的空间内存页表 ...
- n2n网络穿透内网
目录 前言 配置 网络拓扑: 公网服务器的配置 公司电脑的配置 家里笔记本的配置 注意事项 使用n2n网络 n2n的各edge之间传输数据 补充:NAT类型 后记 前言 在家里的时候比较经常需要对公司 ...
- python 日期换算星期 蔡勒公式
#!/usr/bin/env python # encoding: utf-8 #coding=utf-8 date_star={ ':'星期一', ':'星期二', ':'星期三', ':'星期四' ...
- matlab-单位圆内射线数次反射
转载自 https://zhidao.baidu.com/question/2268408219692883828.html 先贴代码和放图,然后我再做出一点解释(其实只是觉得这个思路好厉害,所以想保 ...
- Java的注解总结
java 1.5开始引入了注解和反射,正确的来说注解是反射的一部分,没有反射,注解无法正常使用,但离开注解,反射依旧可以使用.Java的注解详解和自定义注解: https://blog.csdn.ne ...
- 1_Python历史及入门
前提:简述CPU 内存 硬盘 操作系统 应用程序CPU:计算机的运算核心和控制核心,好像人类的”大脑“内存:负责数据与CPU直接数据交流处理,将临时数据和应用程序加载到内存,然后在交由CPU处理. 造 ...
- Centos7】hostnamectl 设置主机名
Centos7中提供了设置主机名的工具 hostnamectl hostname有三种状态 static(永久) transient(瞬态) pretty (灵活) 查看主机名状态 [oracle@h ...
- visual studio开启多核编译方法《转》
原文:https://blog.csdn.net/acaiwlj/article/details/50240625 visual studio在编译时可以启动多核并行编译,以减少编译所需时间.话不多说 ...