element-ui中实现tree子节点部分选中时父节点也选中

作者:雅致坊 时间:2024-04-30 10:39:35 

子节点部分选中时父节点也选中

如果需求是:选中任何一个子节点都默认选择父节点,怎么办?

其实,element-ui也提供了方案,常规下,如果子节点选中,那么这时父节点是半选中状态,在获取选中值时,只需要利用**getHalfCheckedKeys()+getCheckedKeys()**两个方法即可达到效果。

?let zi = this.$refs.tree.getCheckedKeys()//返回选中子节点的key
?let fu =this.$refs.tree.getHalfCheckedKeys()//返回选中子节点的父节点的key
?let new1 = zi.concat(fu)

el-tree数据回显时子节点部分选中,父节点都全选中的坑

el-tree 在编辑中回显数据时,有一个bug,就是只要我们回显的数据中有父节点的 id,不管当前父节点下的子节点是部分选中还是全选中,回显的效果是该父子节点下的子节点都会全选中,这很显然不是我们需要的

看大家有用自己的办法解决,比如有说用 check-strictly 来控制父子互不互相关联的做法,还有自己手动写函数来控制父子节点的选中状态,但是方法多感觉很繁琐。

我这里用getNode()的方法来简单解决

预计的效果

element-ui中实现tree子节点部分选中时父节点也选中

目前实际效果

element-ui中实现tree子节点部分选中时父节点也选中

先上代码看如何实现

template 部分

<el-tree
  :data="list.data"
  show-checkbox
  node-key="id"
  :props="defaultProps"
  :default-expand-all="list.isExpand"
  v-loading="list.loading"
  ref="tree"
  @check-change="checkChange">
</el-tree>

js 部分

export default {
 data () {
   return {
     list: {
       data: [],
       loading: false,
       isExpand: true
     },
     defaultProps: {
       children: 'children',
       label: 'name'
     },
     loading:false
   }
 },
 methods: {
   defaultChecked () { // 默认选中
     this.$nextTick(() => {
       const arr = []
       this.menus.forEach(item => {
         if (!this.$refs.tree.getNode(item.id).childNodes || !this.$refs.tree.getNode(item.id).childNodes.length) {
           arr.push(item.id)
         }
       })
       this.$refs.tree.setCheckedKeys(arr)
     })
   },
 }
}

element-ui中实现tree子节点部分选中时父节点也选中

解析:this.menus 是从后端获取回来的数据,getNode() 获取到当前节点,判断当前节点是否是叶子节点,是的话存入 arr 数组中,最后使用 setCheckedKeys() 将数据回显选中,从而实现父级的半选状态

打印了一下Node 节点

element-ui中实现tree子节点部分选中时父节点也选中

来源:https://www.jianshu.com/p/1fdc5f35a42e

标签:element-ui,tree,子节点,父节点
0
投稿

猜你喜欢

  • Python中22个万用公式的小结

    2022-12-15 21:06:38
  • git如何还原到某次commit并强制推送远程

    2022-07-25 16:45:40
  • Python Prim算法通过遍历墙实现迷宫的生成

    2022-06-26 08:41:09
  • Python实战之能监控文件变化的神器—看门狗

    2022-01-05 22:01:28
  • 一个例子轻松学会Vue.js

    2024-05-02 17:38:47
  • 如何用Python绘制3D柱形图

    2022-12-19 04:22:04
  • Python Flask入门

    2023-11-03 17:00:49
  • Python教程教你如何去除背景

    2023-01-08 17:19:40
  • Golang使用CGO与Plugin技术运行加载C动态库

    2024-02-05 06:20:27
  • python中关于对super()函数疑问解惑

    2022-08-10 04:11:48
  • UCDChina.com 关于用户期望的讨论

    2008-07-10 11:55:00
  • 复习一下sql server的差异备份

    2024-01-20 13:30:34
  • MySQL 字符串模式匹配 扩展正则表达式模式匹配

    2024-01-20 14:47:41
  • python 多维高斯分布数据生成方式

    2022-12-20 20:29:40
  • JSP使用MVC模式完成删除和修改功能实例详解

    2024-03-20 03:39:42
  • 用Python制作mini翻译器的实现示例

    2021-07-26 02:48:09
  • keras模型保存为tensorflow的二进制模型方式

    2022-12-21 07:20:08
  • SqlServer表死锁的解决方法分享

    2011-09-30 11:16:16
  • 详述如何提高MySQL中数据装载效率

    2009-10-26 10:27:00
  • Python中的Selenium异常处理

    2021-08-28 04:15:23
  • asp之家 网络编程 m.aspxhome.com