【elementui】记录解决el-tree开启show-checkbox后,勾选一个叶结点后会自动折叠的现象

第一种解决方案:设置default-expand-keys的值为当前选中的key值即可

javascript 复制代码
<el-tree
  ref="tree"
  class="checkboxSelect-wrap"
  :data="treeData"
  show-checkbox
  node-key="id"
  :expand-on-click-node="true"
  :props="defaultProps"
  :accordion="false"
  :default-checked-keys="defaultCheckedKeys"
  :default-expand-keys="defaultExpandKeys"
  :default-expand-all="false"
  @node-click="handleNodeClick"
  @check="handleCheckChange"
>
</el-tree>

data() {
  return {
	defaultExpandKeys: [],
  }
},
computed: {
  // 当前选中的所有key值
  checkedKeys() {
    return this.$refs.tree.getCheckedKeys()
  },
},
methods() {
  handleCheckChange() {
  	// 每次勾选后都把当前选中的所有key值给defaultExpandKeys 
	this.defaultExpandKeys = this.checkedKeys
  }
}

第二种解决方法:使用getNode()找到当前点击的节点的expanded值,改变他,不让它为false折叠

之所以有第二种方法不用default-expand-keys的原因是:

在使用default-expand-keys之后,会出现一个现象:由于我的页面还有其他el-checkbox,这就造成了明明与el-tree无关,且el-tree的叶子节点是折叠的,但只要el-tree里面的某个节点是全选状态,勾选el-checkbox的时候,就会触发el-tree的叶结点自动展开的现象。

发生该现象的原因:
由于我的el-tree不确定接口数据有多少个,所以是循环出来的,会有两个以上的el-tree组件在同一个div里面,这就造成了使用default-expand-keys虽然可以解决勾选一个叶结点后会自动折叠的现象,但是当前default-expand-key我给的值是所有el-tree的getCheckedKeys()拿到的key值list。但我尝试了即使只给default-expand-keys赋值每个el-tree的getCheckedKeys(),还是会出现该现象。

如图所示:点击不限的瞬间,成长、平衡、价值的所有子结点突然全部展开了

此处我将expand-on-click-node设置了为false,不再使用该属性使得点击节点展开子结点

javascript 复制代码
<el-tree
  ref="tree"
  class="checkboxSelect-wrap"
  :data="treeData"
  show-checkbox
  node-key="id"
  :expand-on-click-node="false"
  :props="defaultProps"
  :accordion="false"
  :default-checked-keys="defaultCheckedKeys"
  :default-expand-all="defaultExpand"
  @node-click="handleNodeClick"
  @check="handleCheckChange"
>
</el-tree>

在node-click事件中调用expand()展开节点:必须写nextTick,不然不生效;注释掉的那段可以用于点击节点、展开该节点下的子节点,就是和:expand-on-click-node="true"属性一个意思;但是不能保证点击叶结点时,该叶结点的上层节点保持展开的状态,没注释的那段,就可以达到该效果。

javascript 复制代码
handleNodeClick(data, node, self) {
  this.$nextTick(() => {
    let currentNode = this.$refs.tree.getNode(data.id)
	
    if(!currentNode.parent.expanded) {
      currentNode.parent.expand(function(){
        for(let i=0; i< currentNode.parent.childNodes.length; i++){
          currentNode.parent.childNodes[i].expand()
        }
      })
    }
  
    // if(!currentNode.expanded){
    //   currentNode.expand(function(){
    //     for(let i=0; i< currentNode.childNodes.length; i++){
    //       currentNode.childNodes[i].expand()
    //     }
    //   })
    // }else {
    //   currentNode.expanded = false  
    // }
  })
},
相关推荐
wangxiaoxuan21723 分钟前
SLAM 的基本结构:前端、后端、回环与地图优化
前端·机器人·科沃斯八界
Agent世界3 小时前
用 CDP 做发布自动化:四道机器闸门与产物验收
前端·javascript
FungLeo3 小时前
成为全栈·Vue 管理后台篇·编辑器图片上传:从文件选择到文章附件关联
前端·vue.js·编辑器·markdown·文件上传·formdata·附件管理
某哈压力大4 小时前
SSH 突然 Connection reset?不是密钥坏了,是 OpenSSL 把 sshd 干趴了
前端·node.js·命令行
程序员大阳4 小时前
副队长ES6+教程(3)--解构赋值
前端·javascript·es6·赋值·解构
神膘护体小月半4 小时前
css - 元素背景图由 hover 触发,初次加载时闪动的解决办法
前端·javascript·css
程序员大阳4 小时前
副队长ES6+教程(2)--let 与 const
前端·javascript·es6·const·let·var
deli0075 小时前
写满 200GB 后 SSD 为什么掉到 95MB/s?SLC 缓存模型实测
前端
曦樂~6 小时前
【Web Development】03JavaScript 基础和事件
开发语言·前端·javascript
deli0076 小时前
HTTPS 的锁是怎么挂上的?TLS 1.3 握手 6 步实测
前端