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>

实现效果:

相关推荐
EchoEcho5 分钟前
深入理解 Vue.js 渲染机制:从声明式到虚拟 DOM 的完整实现
vue.js
黄诂多7 分钟前
APP原生与H5互调Bridge技术原理及基础使用
前端
前端市界10 分钟前
用 React 手搓一个 3D 翻页书籍组件,呼吸海浪式翻页,交互体验带感!
前端·架构·github
文艺理科生12 分钟前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
前端·后端·架构
千寻girling12 分钟前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试
C澒21 分钟前
Vue 项目渐进式迁移 React:组件库接入与跨框架协同技术方案
前端·vue.js·react.js·架构·系统架构
xiaoxue..35 分钟前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
清山博客1 小时前
OpenCV 人脸识别和比对工具
前端·webpack·node.js
要加油哦~1 小时前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
程序员Sunday1 小时前
说点不一样的。GPT-5.3 与 Claude Opus 4.6 同时炸场,前端变天了?
前端·gpt·状态模式