vue3+element plus +el-tree-v2实现树形单选

需求:仅叶子节点可点击,非叶子节点只可展开收起

实现代码:

html 复制代码
<template>
  <el-tree-v2
    :data="data"
    :props="props"
    :node-key="nodeKey"
    :default-expand-all="true"
  >
    <template #default="{ node, data }">
      <div class="custom-tree-node">
        <!-- 只有叶子节点显示单选框 -->
        <el-radio
          v-if="!node.children || node.children.length === 0"
          :model-value="selectedNodeId"
          :label="data.id"
          @click.stop="handleRadioClick(data.id)"
        >
          {{ node.label }}
        </el-radio>
        <!-- 非叶子节点只显示文本 -->
        <span v-else>
          {{ node.label }}
        </span>
      </div>
    </template>
  </el-tree-v2>
</template>

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

const data = [
  // 你的树形数据
  {
    id: 1,
    label: '一级节点',
    children: [
      {
        id: 2,
        label: '二级节点',
        children: [
          { id: 3, label: '三级节点1' },
          { id: 4, label: '三级节点2' }
        ]
      }
    ]
  }
]

const props = {
  label: 'label',
  children: 'children',
}

const nodeKey = 'id'
const selectedNodeId = ref(null)

const handleRadioClick = (id) => {
  selectedNodeId.value = id
  console.log('选中的节点ID:', id)
}
</script>

<style>
.custom-tree-node {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-right: 8px;
}
</style>

实现效果:

相关推荐
D_C_tyu9 分钟前
JavaScript | 数独游戏核心算法实现
javascript·算法·游戏
海天鹰11 分钟前
EXIF-JS
javascript
清汤饺子24 分钟前
【译】我的 AI 进阶之路:从怀疑到深度整合
前端·javascript·后端
@菜菜_达32 分钟前
Vue生命周期
前端·javascript·vue.js
每天吃饭的羊34 分钟前
UMD和IIfe
开发语言·前端·javascript
gCode Teacher 格码致知1 小时前
Javascript提高:自定义的占位符替换-由Deepseek产生
开发语言·javascript·ecmascript
前端那点事1 小时前
Vue线上代码调试全攻略(安全无侵入,新手也能上手)
前端·vue.js
前端那点事1 小时前
Vue批量文件上传并发踩坑指南:3步解决阻塞、限流、进度混乱
前端·面试
桔筐1 小时前
Vue3 v-model 双向绑定导致循环触发的坑
前端·javascript·vue.js
Alice-YUE1 小时前
前端图片优化完全指南:从格式到加载的全面提速方案
前端·笔记·学习