当前位置: 首页 > news >正文

在 Vue3 项目中使用 el-tree

在 Vue3 项目中使用 el-tree

文章目录

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

一、基础用法

1. 引入组件
<template><el-tree:data="treeData":props="defaultProps"@node-click="handleNodeClick"/>
</template><script setup>// 树形数据
const treeData = [{label: '一级节点 1',children: [{label: '二级节点 1-1',children: [{ label: '三级节点 1-1-1' }]}]},{label: '一级节点 2'}
]// 配置项(映射数据中的字段)
const defaultProps = {children: 'children', // 子节点字段名label: 'label' // 显示文本的字段名
}// 节点点击事件
const handleNodeClick = (data, node, event) => {console.log('点击节点:', data, node, event)
}
</script>

二、常用功能与配置

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

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

<el-tree :data="treeData" :props="defaultProps"><!-- 自定义节点内容 --><template #default="{ node, data }"><div class="custom-node"><el-icon v-if="data.children"><Folder /></el-icon><el-icon v-else><Document /></el-icon><span>{{ node.label }}</span><el-button size="mini" @click.stop="handleEdit(data)">编辑</el-button></div></template>
</el-tree><script setup>
import { Folder, Document } from '@element-plus/icons-vue'const handleEdit = (data) => {console.log('编辑节点:', data)
}
</script>
4. 搜索过滤节点

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

<template><el-inputv-model="filterText"placeholder="输入关键词搜索"style="margin-bottom: 10px"/><el-tree:data="treeData":props="defaultProps":filter-method="filterNode"ref="treeRef"/>
</template><script setup>
import { ref, watch } from 'vue'const filterText = ref('')
const treeRef = ref(null)// 过滤方法
const filterNode = (value, data) => {if (!value) return true// 匹配节点文本(支持模糊搜索)return data.label.toLowerCase().includes(value.toLowerCase())
}// 监听搜索文本变化,触发过滤
watch(filterText, (val) => {treeRef.value.filter(val)
})
</script>
5. 获取选中节点

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

<template><el-button @click="getChecked">获取选中节点</el-button><el-treeref="treeRef":data="treeData":props="defaultProps"show-checkbox/>
</template><script setup>
import { ref } from 'vue'const treeRef = ref(null)const getChecked = () => {// 获取所有选中节点(参数为 true 时仅返回叶子节点)const checkedNodes = treeRef.value.getCheckedNodes(false, false)console.log('选中节点:', checkedNodes)
}
</script>

三、动态加载节点

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

<el-tree:data="treeData":props="defaultProps"lazy  <!-- 启用懒加载 -->:load="loadNode"  <!-- 加载子节点的方法 -->ref="treeRef"
/><script setup>
const loadNode = (node, resolve) => {// 根节点(level 为 0)初始加载if (node.level === 0) {return resolve([{ label: '初始节点', id: 1 }])}// 加载子节点(模拟异步请求)setTimeout(() => {const childNodes = [{ label: `子节点 ${node.data.id}-1`, id: `${node.data.id}-1` },{ label: `子节点 ${node.data.id}-2`, id: `${node.data.id}-2` }]resolve(childNodes)}, 500)
}
</script>
http://www.dtcms.com/a/544355.html

相关文章:

  • JVM 字节码剖析
  • 乌兰浩特建设网站WordPress 任务悬赏插件
  • Docker篇3-app.py放在docker中运行的逻辑
  • FlagOS 社区 Triton 增强版编译器 FlagTree v0.3发布,性能全面提升,适配 12+ 芯片生态!
  • 复杂环境下驾驶员注意力实时检测: 双目深度补偿 + 双向 LSTM
  • 强化 门户网站建设wordpress添加视频插件吗
  • 用于电容器的绝缘材料中,所选用的电介质的相对介电常数应较大。用于制造电缆的绝缘材料中,所选用的电介质的相对介电常数应较小。
  • 用Lua访问DuckDB数据库
  • 制作人在那个网站能看情侣wordpress模板
  • Linux网络的HTTPS
  • 改进 shell 搜索
  • Rust异步并发:业务落地的三个关键细节
  • TDengine 数据函数 TAN 用户手册
  • 【数据结构】顺序结构二叉树详解
  • 魔法自助建站网站建设需要准备什么软件
  • 酒吧网站设计大连网站建设ewaylife
  • Oracle_E_Business 远程命令执行漏洞复现(CVE-2025-61882)
  • P1228 地毯填补问题(分治)
  • 苍穹外卖 —— 文件上传和菜品的CRUD
  • 高性能MySql阅读
  • 第3章、MySQL乱码的解决-字符集
  • Ubuntu 安装 Rancher
  • 什么是慢SQL
  • 【人工智能数学基础】多元高斯分布
  • 做网站加入广告联盟做网站的前端是做什么
  • 郑州网页网站制作汕头网站推广优化
  • python电影票房数据可视化分析系统 不同档期电影票房Flask框架 艺恩电影票房网站 requests爬虫(建议收藏)✅
  • webrtc弱网-VivaceUtilityFunction源码分析与算法原理
  • 科技行业ERP系统选择指南:Oracle NetSuite的全面解析
  • 第一个程序HelloWorld