如何在 Vue3 项目中使用 el-tree

 更新时间:2025年10月31日 16:56:39   作者:代码工人笔记  
本文介绍在Vue3项目中使用el-tree的详细代码,本文通过实例代码讲解了常用功能与配置,感兴趣的朋友跟随小编一起看看吧

el-tree 是 Element Plus 提供的树形控件,用于展示具有层级关系的数据,如组织架构、文件目录、分类菜单等。

在 Vue3 项目中使用 el-tree

一、基础用法

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-input
    v-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-tree
    ref="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>

到此这篇关于在 Vue3 项目中使用 el-tree的文章就介绍到这了,更多相关vue3 el-tree使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue-router2.0 组件之间传参及获取动态参数的方法

    vue-router2.0 组件之间传参及获取动态参数的方法

    下面小编就为大家带来一篇vue-router2.0 组件之间传参及获取动态参数的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • vue-router 导航钩子的具体使用方法

    vue-router 导航钩子的具体使用方法

    本篇文章主要介绍了vue-router 导航钩子的具体使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • vue3 diff 算法示例

    vue3 diff 算法示例

    这篇文章主要为大家介绍了vue3 diff 的算法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • vue在history模式下打包部署问题及解决方案

    vue在history模式下打包部署问题及解决方案

    这篇文章主要介绍了vue在history模式下打包部署问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Vue+EleMentUI实现el-table-colum表格select下拉框可编辑功能实例

    Vue+EleMentUI实现el-table-colum表格select下拉框可编辑功能实例

    这篇文章主要给大家介绍了关于Vue+EleMentUI实现el-table-colum表格select下拉框可编辑功能的相关资料,element-UI表格的使用相信大家都不陌生,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-07-07
  • Vue中组件递归及使用问题

    Vue中组件递归及使用问题

    这篇文章主要介绍了Vue中组件的递归和使用问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 概述VUE2.0不可忽视的很多变化

    概述VUE2.0不可忽视的很多变化

    本文给大家分析下vue2.0几个重要的与自己目前项目相关的变化,也是vue2.0不可忽视的变化,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • Vue+ElementUi实现点击表格链接页面跳转和路由效果

    Vue+ElementUi实现点击表格链接页面跳转和路由效果

    这篇文章主要介绍了Vue+ElementUi实现点击表格中链接进行页面跳转和路由,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Vue前端如何实现生成PDF并下载功能详解

    Vue前端如何实现生成PDF并下载功能详解

    在前端的岗位上经常需要实现个生成个并下载的可视化图表页PDF文件,这篇文章主要给大家介绍了关于Vue前端如何实现生成PDF并下载功能的相关资料,需要的朋友可以参考下
    2021-10-10
  • 基于Vue实现Excel解析与导出功能详解

    基于Vue实现Excel解析与导出功能详解

    导入导出excel这是前端做管理系统最常用的功能了,下面这篇文章主要给大家介绍了基于Vue实现Excel解析与导出功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08

最新评论