博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue项目两级全选(多级原理也一样),感觉有点意思,随手一记
阅读量:5300 次
发布时间:2019-06-14

本文共 2499 字,大约阅读时间需要 8 分钟。

需求:

首先说一下思路:我首先把数据列表两级遍历了一下,增加了一个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渲染不了),如果监听到了你可以不加,加了肯定是对的)  })})

页面结构

全选

{
{item.typeName}}
{ {subItem.goodName}}

以下步骤是建立在你把数据循环遍历加了一个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();          },

上面是拿到所有勾选的值,然后该干嘛干嘛

 

转载于:https://www.cnblogs.com/zhihou/p/10736585.html

你可能感兴趣的文章
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>