Element plus el-tree 实现选择框单选、根节点不可选的功能代码

文章介绍了如何在Vue的el-tree组件中,实现root节点不可被选中,而子节点可以单选的逻辑,通过`check-strictly`属性和自定义的`handleCheck`方法来控制节点的选中状态。
摘要由CSDN通过智能技术生成

我的需求是,el-tree控件root节点不能选中,子节点只能选中一个。

代码实现:

<template>
  <el-tree
    :data="data"
    show-checkbox
    node-key="id"
    :check-strictly="true"
    @check="handleCheck"
    ref="tree"
  >
  </el-tree>
</template>

属性说明:

show-checkbox:显示多选框

check-strictly:父子不关联(选择子节点不会关联选中父节点)

check:点击节点的时候触发的时间

<script>
import { ref } from 'vue';

export default {
  setup() {
    const tree = ref(null);
    const data = ref([
      {
        id: 1,
        label: '根节点',
        children: [
          { id: 2, label: '节点1' },
          { id: 3, label: '节点2' }
        ]
      }
    ]);

    const handleCheck = (checkedNode, nodeData) => {
      // 如果选中的是根节点,则取消选择
      if (checkedNode.id === 1) {
        tree.value.setCheckedKeys([]);
        return;
      }

      // 获取所有已选中的节点
      const checkedKeys = tree.value.getCheckedKeys();

      // 如果当前有其他节点选中,移除它们的选中状态
      if (checkedKeys.length > 1) {
        const otherCheckedKeys = checkedKeys.filter(key => key !== checkedNode.id);
        tree.value.setCheckedKeys([checkedNode.id]);

        // 取消之前选中节点的勾选状态
        otherCheckedKeys.forEach(key => {
          tree.value.setChecked(key, false);
        });
        // 把当前节点的id的checked属性设置为true,如果不设置,会在勾选第二个选项时点击两次。
        tree.value.setChecked(checkedNode.id, true);
      }
    };

    return {
      data,
      handleCheck,
      tree
    };
  }
};
</script>

思路:

主要通过check事件来实现

首先判断当前节点是否为root节点,我这边是id=1的是root节点,自行修改成自己的root。如果选中的是root节点,就通过ref对象中的setCheckedKeys属性设置为空数组

如果选中的不是root节点,默认不处理第一次选中。如果第二次选中复选框时,需要根据当前选中节点的id过滤出原来选中的节点id,然后将原来选中的节点id的checked属性设置为false。这样就取消原来的勾选状态。同时,要把当前节点id的checked属性设置为true。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值