el-tree 设置单选,设置子节点数据,选择父节点不会全选子节点,勾选后自动展开,点击已展开的则折叠

需求:

是一个区域选择的需求,所以是单选,并且是逐级选择,选择时根据上一级的id调接口请求下一级的数据,之前没怎么接触过el-tree组件,这次总结一下。
在这里插入图片描述

问题1:设置单选

show-checkbox属性,显示选择框。
check-on-click-node属性,点击文本节点时也会勾选选择框。
node-key和props就不做介绍了,需要修改为自己对应的字段,有问题可以看看官方文档。

 <el-tree :data="treeArr" show-checkbox check-on-click-node 
 node-key="id" :props="props" @check="check" ref="tree"/> 

通过ref获取tree组件,使用它的方法setCheckedKeys,这个方法是用来设置选中的对象是哪个,el-tree中的check方法回调一个data,为点击处的数据对象,获取它的node-key,赋值一下即可。

 check(data) {
      this.$refs.tree.setCheckedKeys([data.id]) // 设置单选
    }
问题2:设置子节点数据

很简单,使用updateKeyChildren方法,第一个参数是父节点的node-key,第二个参数是子节点数据(后端数据)。

 async check(data) {
      this.$refs.tree.setCheckedKeys([data.id]) // 设置单选
      const { data: res } = await getData() //请求后端数据
      this.$refs.tree.updateKeyChildren(data.id, res)
    }
问题3:选择父节点时会自动全选子节点

这不要了老命,俺只想单选啊,研究一下,需要加个check-strictly。
check-strictly属性,控制父与子是否不互相关联,默认为false,互相关联。

 <el-tree :data="treeArr" show-checkbox  check-strictly 
 check-on-click-node node-key="id" :props="props" 
 @check="check" ref="tree" /> 
问题4:勾选后自动展开,点击已展开的则折叠

设置节点的expanded字段为true,展开,为false,折叠。
@check方法的回调里不能直接获取到当前节点,可以使用组件的getNode方法来获取,传递当前节点的数据即可获取到当前节点。
这个有个巨坑,我展开完想关闭,突然快速地关闭又打开,检查了半天发现是因为点击节点时节点会自带一个折叠的函数,把我赋值为false的expanded字段又变成true了,一口老血吐出,加上 :expand-on-click-node="false"问题解决。

 <el-tree :data="treeArr" show-checkbox check-strictly 
 check-on-click-node :expand-on-click-node="false" 
 node-key="id" :props="props" @check="check" ref="tree" /> 
 async check(data) {
      this.$refs.tree.setCheckedKeys([data.id]) // 设置单选
      const { data: res } = await getData() //请求后端数据
      this.$refs.tree.getNode(data).expanded = !this.$refs.tree.getNode(data).expanded // 设置展开折叠
    }
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element Plus的el-tree组件中,要实现点击勾选框展开下方全部子节点,可以使用以下方法: 首先,需要在el-tree组件上设置show-checkbox属性为true,以显示选择框。同时,设置check-on-click-node属性为true,以在点击文本节点时也勾选选择框。例如: ```html <el-tree :data="treeArr" show-checkbox check-on-click-node node-key="id" :props="props" ref="tree"></el-tree> ``` 接下来,可以使用check方法的回调来实现展开下方全部子节点的功能。在check方法中,可以通过this.$refs.tree.getNode(data)来获取当前节点的数据,并设置其expanded字段为true来展开子节点。例如: ```javascript check(data) { this.$refs.tree.setCheckedKeys(\[data.id\]); // 设置单选 this.$refs.tree.getNode(data).expanded = true; // 设置展开 } ``` 此外,如果想要避免快速关闭再打开时出现问题,可以设置expand-on-click-node属性为false,以禁止点击节点时自动折叠。例如: ```html <el-tree :data="treeArr" show-checkbox check-on-click-node :expand-on-click-node="false" node-key="id" :props="props" @check="check" ref="tree"></el-tree> ``` 综上所述,通过设置show-checkbox属性、check-on-click-node属性、expand-on-click-node属性以及在check方法中设置节点的expanded字段,可以实现点击勾选框展开下方全部子节点的功能。 #### 引用[.reference_title] - *1* [Vue Element UI el-tree 实例 获取 tree show-checkbox 选中子节点](https://blog.csdn.net/ForeverBana/article/details/105769210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [el-tree 设置单选设置子节点数据选择父节点不会全选子节点勾选后自动展开点击展开的则折叠](https://blog.csdn.net/qq_42611074/article/details/122194857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值