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版本,版本太低. 后来 卸载了 重新 ...
随机推荐
- Vue 编程式导航(通过js跳转页面)以及路由hash模式和history模式
第一种方法: this.$router.push({path:'shopcontent?aid=3'} 第二种方法 this.$router.push({name:'news'}} 通过在ma ...
- jQuery属性操作总结
jquery属性包括以下几个: attr(name|pro|key,val|fn) removeAttr(name) prop(n|p|k,v|f)1.6+ removeProp(name)1.6+ ...
- tensorflow/threading 用到的一些函数
---恢复内容开始--- import tensorflow as tf 1 tf.squeeze([1,2,3,4]) 删除所有为1的维度 eg shape从(1,2,3,1)到(2,3 ...
- solr全文检索实现原理
本文转自:https://blog.csdn.net/u014209975/article/details/53263642 https://blog.csdn.net/lihang_1994/ ...
- 十进制 -> 十六进制
x /16 依次取余 ,最先余作十六进制的最低 字节有效位,最后的余数 作最高的字节有效位,其中我们需要注意理解 的是 一个 数据的 最高字节及 内存的 高地址及低地址 更进一步的就算机器存储的 ...
- 关于JWTtoken的管理问题
JWT简介: Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.因为网络上有很多关于jwt的详细介绍了,所以我这里就不再赘述.但是JWT的大 ...
- IntelliJ IDEA插件系列
参考: IntelliJ IDEA插件系列 1. activate-power-mode 和 Power mode II 根据Atom的插件activate-power-mode的效果移植到IDEA上 ...
- Gradle 打多渠道包
使用gradle 打多渠道包记录经验如下图可见,每个渠道是包含debug 和realse版本的.通过打印BASE_URL 发现在渠道和版本中都可以修改BuildConfig的常量,这样一次可以打出多个 ...
- Url的拦截问题
如果 在中没有, 就会去找欢迎页,先找/index,jsp,在webapp里并没有,就继续往下找/index.html, 是图中的拦截形式,就会被servlet拦截,对应于controller中的请求 ...
- Django03-视图系统views
一.编写视图 一个视图函数,是一个简单的Python函数,它接受web请求,并且返回web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是 ...