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版本,版本太低. 后来 卸载了 重新 ...
随机推荐
- eclipse修改android项目的apk包名类名
在Google提供的Eclipse集成开发环境adt-bundle下修改名称的总结: 1. 修改工程名(apk名称) 在弹出的对话框中输入新名称 该操作实际上是修改<project&g ...
- nginx+ftp服务器搭建简易文件服务器
在做一些小项目和学习项目过程中,学习了通过 nginx 和 FTP 搭建小型文件服务器,记录下: 1.环境 电脑:acer 操作系统:windows 10 ftp服务器 2.下载 nginx, 通过双 ...
- Postman 设置全局变量和环境变量设置(之 图形界面设置变量)
在Postman中有两种方法添加变量:1.图形界面操作添加 2.执行代码添加 1.图形界面操作添加,点击右上角齿轮按钮手动添加所需测试环境: 2.点击右上角的小眼睛可以编辑.添加“全局变量”和 ...
- The component and implementation of a basic gradient descent in python
in my impression, the gradient descent is for finding the independent variable that can get the mini ...
- 转:强制关闭.net程序
/// <summary> /// 运行DOS命令 /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID /// </summary> /// & ...
- 记录一次JQuery 动态参数使用
之前动态id 使用时时候一直是复制黏贴的,到自己实际使用的时候却毫无印象,这样不可取呀 $('#id') 取的是 id=‘id’ 的元素 $('#'+id) 才是取id为动态值的时候正确写法 记录 ...
- Xilinx Zynq ZC-702 开发(02)—— 通过 Xilinx SDK 调试 Linux 应用
远程调试环境由 PC 上运行的 System Debugger(集成在 Xilinx SDK 中) 和 Zynq 板上运行的 Linux TCF Agent 共同构成, 两者通过 TCP 连接,架构图 ...
- 40_redux_counter应用_redux完善版本
项目结构: 代码: import React from 'react'; import ReactDOM from 'react-dom'; import store from './redux/st ...
- (ZT)算法杂货铺——k均值聚类(K-means)
https://www.cnblogs.com/leoo2sk/category/273456.html 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先 ...
- 程序员常用字体(vs2008字体修改方案)
字体不仅是设计师手中重要的武器,对我们开发人员来说,字体的选择也有许多讲究,一个好的.适合展示代码的字体,应该具备以下要素: 等宽的字符 简洁.清晰并且规范的字符形状 支持ASCII码为128以上的扩 ...