element的el-tree多选树(复选框)父子节点关联不关联

 更新时间:2021年05月16日 16:34:12   作者:Beam007  
最近想要实现多选框关联的功能,但是却出现了element的el-tree多选树(复选框)父子节点关联不关联的问题,本文就来介绍一下解决方法,一起来了解一下

属性check-strictly

官方文档提供属性check-strictly,在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false。
而此属性的意思是:
默认false,父子关联。有如下现象及问题:
1、当你通过函数设置勾选节点的时候,只要父节点被勾选子节点必会勾选上,即便设置勾选的list中无此子节点。
2、当你点击勾选复选框时候,若点击父节点,其下子节点全部统一跟随父节点变化;若点击子节点,子节点部分勾选时父节点处于半选状态,子节点全部勾选时父节点选中,子节点全部不勾选时父节点未选中。
设置true,严格的遵循父子不互相关联。
1、当你通过函数设置勾选节点的时候,严格通过设置勾选的list中有无此节点来断定是否勾选。
2、当你点击勾选复选框时候,无论点击的哪个节点只会改变当前节点的勾选状态,不存在半选状态。

系统的角色菜单控制的问题

问题来了,在系统的角色菜单控制的时候,需要满足以下条件:
1、当通过函数设置勾选节点的时候,需要严格通过设置勾选的list中有无此节点来断定是否勾选,即勾选父节点而不一定勾选全部子节点。
2、当点击勾选复选框时候,若点击父节点,其下子节点全部统一跟随父节点变化。
3、当点击勾选复选框时候,若点击子节点,子节点部分勾选时父节点处于半选状态,子节点全部勾选时父节点选中,子节点全部不勾选时父节点未选中。

需求思考:

一、check-strictly=false,行不通

按照需要满足的条件,明显靠近将check-strictly设置为false,于是从check-strictly=false父子互相关联的基础入手,需要解决的问题就是:
将尚未全部勾选的子节点对应的父节点改为半勾选状态,但是查找文档良久无果。
只有getHalfCheckedKeys和getHalfCheckedNodes,并没有设置成半勾选。

二、check-strictly=true,试一试

只能试一下将check-strictly设置为true,从check-strictly=true严格的遵循父子不互相关联入手,需要解决的问题就是:
1、当点击勾选复选框时候,若点击父节点,其下子节点全部统一跟随父节点变化。
2、当点击勾选复选框时候,若点击子节点,子节点部分勾选时父节点处于半选状态,子节点全部勾选时父节点选中,子节点全部不勾选时父节点未选中。
而在严格的父子不互相关联时,点击父子节点不会出现半选状态,也无法通过函数设置半选状态,无奈简化解决问题:
1、当点击勾选复选框时候,若状态为 选中
1.1、其所有 父节点 (父节点、父节点的父节点以此类推)全部统一跟随当前节点变化为 选中
1.2、其下 子节点 全部统一跟随父节点变化为 选中
2、当点击勾选复选框时候,若状态为 未选中 ,其下 子节点 全部统一跟随父节点变化为 未选中

解决代码:

1、el-tree标签属性

<el-tree ref="tree" :data="treeMenus" :props="multiProps" :show-checkbox="true"
 node-key="menuId" highlight-current :expand-on-click-node="false" 
 :default-checked-keys="checkedId" :check-strictly="true" @check="clickDeal">

node-key:每个树节点用来作为唯一标识的属性,整棵树应该是唯一的。标识节点唯一的键值名称。
default-checked-keys = checkedId:对应el-tree多选树组件初始化时默认选中ID
check-strictly = true:是否严格的遵循父子不互相关联的做法
check:当复选框被点击的时候触发的方法
props:配置选项,具体看下图。

在这里插入图片描述

而根据后台的返回,针对:props=“multiProps”,我的配置为:

multiProps: {
  children: 'childs',
  label: 'name',
  disabled: this.isDisabled
}

识别childs字段为子节点name为节点名称,而默认是识别children为子节点label为节点名称。

2、el-tree组件有变化时给多选树重新赋值

updated () {
 // 给多选树设置默认值
  this.$refs.tree.setCheckedKeys(this.checkedId)
},

checkedId为勾选节点的数组,不区分父子节点。

3、复选框点击时的特殊处理

clickDeal (currentObj, treeStatus) {
  // 用于:父子节点严格互不关联时,父节点勾选变化时通知子节点同步变化,实现单向关联。
  let selected = treeStatus.checkedKeys.indexOf(currentObj.menuId) // -1未选中
  // 选中
  if (selected !== -1) {
    // 子节点只要被选中父节点就被选中
    this.selectedParent(currentObj)
    // 统一处理子节点为相同的勾选状态
    this.uniteChildSame(currentObj, true)
  } else {
    // 未选中 处理子节点全部未选中
    if (currentObj.childs.length !== 0) {
      this.uniteChildSame(currentObj, false)
    }
  }
},
// 统一处理子节点为相同的勾选状态
uniteChildSame (treeList, isSelected) {
  this.$refs.tree.setChecked(treeList.menuId, isSelected)
  for (let i = 0; i < treeList.childs.length; i++) {
    this.uniteChildSame(treeList.childs[i], isSelected)
  }
},
// 统一处理父节点为选中
selectedParent (currentObj) {
  let currentNode = this.$refs.tree.getNode(currentObj)
  if (currentNode.parent.key !== undefined) {
    this.$refs.tree.setChecked(currentNode.parent, true)
    this.selectedParent(currentNode.parent)
  }
},

到此这篇关于element的el-tree多选树(复选框)父子节点关联不关联的文章就介绍到这了,更多相关element el-tree多选树不关联内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 前端文件导出设置responseType为blob时遇到的问题及解决

    前端文件导出设置responseType为blob时遇到的问题及解决

    这篇文章主要给大家介绍了关于前端文件导出设置responseType为blob时遇到的问题及解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • vue3模块创建runtime-dom源码解析

    vue3模块创建runtime-dom源码解析

    这篇文章主要为大家介绍了vue3模块创建runtime-dom源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Vue单文件组件基础模板小结

    Vue单文件组件基础模板小结

    本篇文章主要介绍了Vue单文件组件基础模板小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Vue-Jest 自动化测试基础配置详解

    Vue-Jest 自动化测试基础配置详解

    目前开发大型应用,测试是一个非常重要的环节,而在 Vue 项目中做单元测试可以用 Jest,本文主要介绍了Vue-Jest 自动化测试,感兴趣的可以了解一下
    2021-07-07
  • vue-cli项目配置多环境的详细操作过程

    vue-cli项目配置多环境的详细操作过程

    vue-cli 默认只提供了 dev 和 prod 两种环境。这篇文章主要介绍了vue-cli项目配置多环境的详细操作过程,需要的朋友可以参考下
    2018-10-10
  • vue3封装简易的vue-echarts问题

    vue3封装简易的vue-echarts问题

    这篇文章主要介绍了vue3封装简易的vue-echarts问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vue select组件的使用与禁用实现代码

    vue select组件的使用与禁用实现代码

    这篇文章主要介绍了vue--select组件的使用与禁用的实现代码,非常不错,具有参考借鉴价值 ,需要的朋友可以参考下
    2018-04-04
  • Vue源码学习之关于对Array的数据侦听实现

    Vue源码学习之关于对Array的数据侦听实现

    这篇文章主要介绍了Vue源码学习之关于对Array的数据侦听实现,Vue使用了一个方式来实现Array类型的监测就是拦截器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • vue中的虚拟dom知识点总结

    vue中的虚拟dom知识点总结

    这篇文章主要介绍了vue中的虚拟dom知识点总结,文章围绕主题内容展开详细介绍,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-04-04
  • npm安装vue@cli报错的简单处理方式

    npm安装vue@cli报错的简单处理方式

    最近工作中遇到了报错,现在将解决的办法分享给大家,下面这篇文章主要给大家介绍了关于npm安装vue@cli报错的简单处理方式,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论