在 Vue3 项目中使用 el-tree

作者:代码工人笔记日期:2025/11/3

在 Vue3 项目中使用 el-tree

文章目录

      • 一、基础用法
          • 1. 引入组件
        • 二、常用功能与配置
          • 1. 节点选择(复选框 / 单选)
            * 2. 展开 / 折叠控制
            * 3. 自定义节点内容
            * 4. 搜索过滤节点
            * 5. 获取选中节点
        • 三、动态加载节点

一、基础用法

1. 引入组件
1<template>
2  <el-tree
3    :data="treeData"
4    :props="defaultProps"
5    @node-click="handleNodeClick"
6  />
7</template>
8
9<script setup>
10
11// 树形数据
12const treeData = [
13  {
14    label: '一级节点 1',
15    children: [
16      {
17        label: '二级节点 1-1',
18        children: [
19          { label: '三级节点 1-1-1' }
20        ]
21      }
22    ]
23  },
24  {
25    label: '一级节点 2'
26  }
27]
28
29// 配置项(映射数据中的字段)
30const defaultProps = {
31  children: 'children', // 子节点字段名
32  label: 'label' // 显示文本的字段名
33}
34
35// 节点点击事件
36const handleNodeClick = (data, node, event) => {
37  console.log('点击节点:', data, node, event)
38}
39</script>
40

二、常用功能与配置

1. 节点选择(复选框 / 单选)
  • 复选框:添加 show-checkbox 属性,支持多选
  • 单选:结合 check-strictly(父子不关联)和 check-on-click-node(点击节点选中)
1<el-tree
2  :data="treeData"
3  :props="defaultProps"
4  show-checkbox  <!-- 显示复选框 -->
5  check-strictly  <!-- 父子节点不关联 -->
6  check-on-click-node  <!-- 点击节点即可选中 -->
7  @check-change="handleCheckChange"  <!-- 选中状态变化事件 -->
8/>
9
10<script setup>
11// 选中状态变化事件
12const handleCheckChange = (data, checked, indeterminate) => {
13  console.log('选中变化:', data, checked, indeterminate)
14}
15</script>
16
2. 展开 / 折叠控制
1<el-tree
2  :data="treeData"
3  :props="defaultProps"
4  :default-expanded-keys="[1, 3]"  <!-- 默认展开 id 为 1 和 3 的节点 -->
5  :expand-on-click-node="false"  <!-- 点击节点不展开,仅通过箭头控制 -->
6/>
7
3. 自定义节点内容

通过 scoped-slot 自定义节点显示内容(如添加图标、按钮等):

1<el-tree :data="treeData" :props="defaultProps">
2  <!-- 自定义节点内容 -->
3  <template #default="{ node, data }">
4    <div class="custom-node">
5      <el-icon v-if="data.children"><Folder /></el-icon>
6      <el-icon v-else><Document /></el-icon>
7      <span>{{ node.label }}</span>
8      <el-button size="mini" @click.stop="handleEdit(data)">编辑</el-button>
9    </div>
10  </template>
11</el-tree>
12
13<script setup>
14import { Folder, Document } from '@element-plus/icons-vue'
15
16const handleEdit = (data) => {
17  console.log('编辑节点:', data)
18}
19</script>
20
4. 搜索过滤节点

结合 filter-method 实现节点搜索功能:

1<template>
2  <el-input
3    v-model="filterText"
4    placeholder="输入关键词搜索"
5    style="margin-bottom: 10px"
6  />
7  <el-tree
8    :data="treeData"
9    :props="defaultProps"
10    :filter-method="filterNode"
11    ref="treeRef"
12  />
13</template>
14
15<script setup>
16import { ref, watch } from 'vue'
17
18const filterText = ref('')
19const treeRef = ref(null)
20
21// 过滤方法
22const filterNode = (value, data) => {
23  if (!value) return true
24  // 匹配节点文本(支持模糊搜索)
25  return data.label.toLowerCase().includes(value.toLowerCase())
26}
27
28// 监听搜索文本变化,触发过滤
29watch(filterText, (val) => {
30  treeRef.value.filter(val)
31})
32</script>
33
5. 获取选中节点

通过组件的 getCheckedNodes 方法获取选中的节点(复选框模式):

1<template>
2  <el-button @click="getChecked">获取选中节点</el-button>
3  <el-tree
4    ref="treeRef"
5    :data="treeData"
6    :props="defaultProps"
7    show-checkbox
8  />
9</template>
10
11<script setup>
12import { ref } from 'vue'
13
14const treeRef = ref(null)
15
16const getChecked = () => {
17  // 获取所有选中节点(参数为 true 时仅返回叶子节点)
18  const checkedNodes = treeRef.value.getCheckedNodes(false, false)
19  console.log('选中节点:', checkedNodes)
20}
21</script>
22

三、动态加载节点

对于大数据场景,可通过 load 事件实现节点的懒加载(按需加载子节点):

1<el-tree
2  :data="treeData"
3  :props="defaultProps"
4  lazy  <!-- 启用懒加载 -->
5  :load="loadNode"  <!-- 加载子节点的方法 -->
6  ref="treeRef"
7/>
8
9<script setup>
10const loadNode = (node, resolve) => {
11  // 根节点(level 为 0)初始加载
12  if (node.level === 0) {
13    return resolve([{ label: '初始节点', id: 1 }])
14  }
15  // 加载子节点(模拟异步请求)
16  setTimeout(() => {
17    const childNodes = [
18      { label: [`子节点 ${node.data.id}-1`](https://xplanc.org/primers/document/zh/10.Bash/90.%E5%B8%AE%E5%8A%A9%E6%89%8B%E5%86%8C/EX.id.md), id: [`${node.data.id}-1`](https://xplanc.org/primers/document/zh/10.Bash/90.%E5%B8%AE%E5%8A%A9%E6%89%8B%E5%86%8C/EX.id.md) },
19      { label: [`子节点 ${node.data.id}-2`](https://xplanc.org/primers/document/zh/10.Bash/90.%E5%B8%AE%E5%8A%A9%E6%89%8B%E5%86%8C/EX.id.md), id: [`${node.data.id}-2`](https://xplanc.org/primers/document/zh/10.Bash/90.%E5%B8%AE%E5%8A%A9%E6%89%8B%E5%86%8C/EX.id.md) }
20    ]
21    resolve(childNodes)
22  }, 500)
23}
24</script>
25

在 Vue3 项目中使用 el-tree》 是转载文章,点击查看原文


相关推荐


SQL之表的查改(上)
啊吧怪不啊吧2025/10/31

目录 1. Retrieve 1.2 Select 1.2.1全列插入 1.2.2 use 1.2.3 指定列查询 1.2.4 select+固定值 1.2.5 列值修改查询 1.2.6 别名 1.2.7 查询结果去重 在前面的文章中我们链接了表的增删操作,今天我们来聊一下表的查找与修改操作。 1. Retrieve 首先我们要了解到Retrieve不是某一个具体的指令,它描述的是 “从数据库表中获取数据” 这一行为本身,而实现这种行为的具体技


Swift 并发编程新选择:Mutex 保护可变状态实战解析
unravel20252025/10/29

前言 Swift 5.5 带来 async/await 与 Actor 后,「用 Actor 包一层」几乎成了默认答案。 但在日常开发里,我们经常会遇到两种尴尬: 只想保护一个计数器、缓存或 token,却不得不把整段逻辑都改成异步; 把对象放到 @MainActor 后,发现后台线程也要用,结果到处是 await。 Apple 在 Swift 5.9 前后把 Mutex 正式搬进标准库(通过 Synchronization 模块),给“同步但不想异步”的场景提供了第三条路。 Mutex 是


F032 材料科学文献知识图谱可视化分析系统(四种知识图谱可视化布局) | vue + flask + echarts + d3.js 实现
B站麦麦大数据2025/10/26

文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 编号: F032 视频 neo4j 文献知识图谱可视化分析系统 | vue + flask + echarts + d3.js 实现 1 系统简介 系统简介:本系统是一个基于Vue+Flask构建的材料科学文献知识图谱可视化分析系统,其核心功能围绕文献数据的抓取、分析、可视化和用户管理展开。主要包括:主页模块,用于展示最新文献卡片,方便用户快速了解最新动态;文献搜索功能,支持用户通过关键词或其他条


【DeepSeek新开源】DeepSeek-OCR如何用“视觉压缩”革新长文本处理
kakaZhui2025/10/23

最近DeepSeek团队刚放出DeepSeek-OCR项目,不再将其视为一个简单的OCR(光学字符识别)工具,而是将其作为一个开创性的实验平台,旨在探索和验证一个激进的理念:我们能否利用视觉模态作为一种超高效的文本信息压缩媒介? 即,将长篇的数字文本“渲染”成一张图像,再用一个强大的视觉语言模型(VLM)从这张图像中“读”出原文。 接下来我们一起看下DeepSeek-OCR从“视觉压缩”的核心哲学,到其创新的DeepEncoder架构和多分辨率支持,再到其庞大的数据工程和训练管线。 1. 引


想偷卷?但微信不支持md文档?这个软件助你!
前端AC2025/10/22

📝 Markdown 查看器 - 现代化的文档预览工具 一个基于 React 19 + TypeScript 构建的现代化 Markdown 文档查看器,支持实时预览、语法高亮、数学公式渲染等功能。 在微信或浏览器上打开此编辑器,上传你的md文档可以上课偷偷看自己写的博客哈哈,这个是我解决微信这个没有md预览的痛点,自己用ai搞了一个小工具出来,效果还不错,还有图片可以借助图床工具:图床 - 简单、快速、免费的图床把自己图片上传到这里,就不会导致路径问题了。 项目概述 项目背景 在日常开发


告别页面呆板!这5个DOM操作技巧让你的网站活起来
良山有风来2025/10/21

你是不是经常遇到这样的情况:精心设计的页面看起来很美,但用户操作起来却毫无反应?点击按钮没反馈,表单提交没提示,页面切换生硬得像在翻纸质书? 这就像给用户端上了一盘色香味俱全的菜,结果吃起来却发现是冷的。问题就出在——你还没有掌握DOM操作的真正精髓。 今天,我就带你彻底搞懂JavaScript DOM操作,从基础到实战,让你的网页真正“活”起来。读完这篇文章,你不仅能理解DOM的工作原理,还能掌握5个让用户体验飙升的实用技巧。 什么是DOM?它为什么如此重要? 简单来说,DOM就是连接HTML


JVM 调优黄金三步法:监控→分析→验证
老K的Java兵器库2025/10/19

JVM 调优黄金三步法:监控→分析→验证 (方法论 + 案例 + 压测验证,新手也能照抄) 关键词:JVM 调优、监控、分析、验证、压测、方法论、黄金三步 阅读时长:20 min 环境:CentOS 7 + OpenJDK 8u342 + SpringBoot 1.5 + JMeter 5 适合:1~5 年 Java 开发、生产调优无思路、面试「JVM 怎么调优」标准答案 一、0 基础速记:黄金三步一句话 步骤目标一句话监控发现瓶颈先知道「哪里慢」再动手分析定位根因用数据证


Windows下Jenkins服务未自动重启问题解决
一张假钞2025/10/18

个人博客地址:Windows下Jenkins服务未自动重启问题解决 | 一张假钞的真实世界 成功安装 Jenkins 服务后,有时开机后 Jenkins 服务未自动启动。查看 Jenkins 服务安装目录下的日志发现没有服务启动的日志,所以猜测是系统启动后 Jenkins 服务未调起。 通过按 Win + R,然后输入 services.msc 并按回车来打开服务管理工具。找到 Jenkins 服务,点击右键,查看“属性”,Jenkins 默认设置如下: 为了每次开机能自动启动 Jen


【ComfyUI】电商模特面部融合
Mr数据杨2025/10/16

今天给大家展示一个 适用于相同脸型商品图生成的ComfyUI工作流,该工作流可高效处理两张来源图像,经过面部对齐、区域裁剪、图像融合与生成过程,快速构建视觉一致性强、适用于电商场景的最终图像输出。整体流程融合了 FluxKontext 模型推理、面部区域对齐处理、条件控制生成以及结果拼接输出等关键模块,极大提升图像一致性与真实感,适用于商品营销图、模特换穿搭图、广告图生成等多种需求场景。 文章目录 工作流介绍核心模型Node节点 工作流程应用场景开发与应用 工作流介绍 本工


ELK运维之路(Logstash7&Kibana接入ES集群-7.17.24)
会飞的小蛮猪2025/10/15

书接前文,本章介绍Logstash和Kibana组件的部署,测试环境哦别干生产,如有帮助到您请给个免费的赞呗! 1.Logstash 1.1 Docker-compose 配置片段 root@ubuntu2204test99:~/elkf# vi docker-compose.yml logstash: image: logstash:7.17.24 container_name: logstash-7.17.24 restart: always en

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0