VUE树形菜单组件如何实现展开/收起、全选/取消功能

组件结构

基于Vue 3和Element Plus的树形菜单组件,包含展开/收起、全选/取消功能。模板部分使用el-tree展示层级数据,底部按钮控制展开状态和选择状态。

核心功能实现

数据转换 通过buildTree函数将扁平数组转换为树形结构:

typescript 复制代码
const buildTree = (list: MenuNode[], pid = 0) => 
    list.filter(i => i.pid === pid).map(i => ({ ...i, children: buildTree(list, i.id) }));

展开控制 利用expandedKeys和节点遍历实现展开状态切换:

typescript 复制代码
const toggleExpand = () => {
    isExpanded.value = !isExpanded.value;
    menuTreeRef.value?.store._getAllNodes().forEach(n => n.expanded = isExpanded.value);
};

全选逻辑 递归收集所有节点ID实现全选功能:

typescript 复制代码
const getAllMenuIds = () => {
    const ids: number[] = [];
    const collect = (n: MenuNode) => { ids.push(n.id); n.children?.forEach(collect); };
    menuData.value.forEach(collect);
    return ids;
};

动态数据加载 支持API异步加载数据时可添加lazy属性和load方法:

typescript 复制代码
<el-tree :load="loadNode" lazy />

自定义节点内容 通过插槽实现节点定制化渲染:

html 复制代码
<el-tree>
    <template #default="{ data }">
        <span class="custom-node">{{ data.title }}</span>
    </template>
</el-tree>

性能优化 大数据量时建议启用虚拟滚动:

typescript 复制代码
<el-tree :height="400" virtual-scrolling />

典型应用场景

  1. 权限管理系统:勾选菜单项作为角色权限配置
  2. 目录导航:展示多级分类结构
  3. 数据筛选:树形条件选择器

注意事项

  1. 节点ID需保持唯一性
  2. 深层嵌套数据建议限制层级深度
  3. 选中状态持久化需配合localStorage或后端存储

效果如下:

收起

展开

全选

代码如下:

相关推荐
meilindehuzi_a7 分钟前
Vue3组件样式隔离与组件通信实战:从 scoped、props 校验到记事本应用
前端·javascript·vue.js
LaughingZhu9 分钟前
Product Hunt 每日热榜 | 2026-07-28
前端·神经网络·react.js·搜索引擎·前端框架
陈随易7 小时前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
Highcharts.js8 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
To_OC8 小时前
我被 useState 坑了两次之后,终于把它的脾气摸透了
前端·javascript·react.js
鱼樱前端8 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
_lucas8 小时前
给知识库网站接入AI问答
前端·ai编程·全栈
前端糕手9 小时前
前端面试题大全:JavaScript + Vue3 + React + TypeScript + 工程化 + 性能优化
前端
我不叫武10 小时前
一个用 Rust 写的离线编码查询桌面工具
前端
Web4Browser11 小时前
指纹浏览器 API 自动化怎么接:启动 Profile、获取 CDP 端点并连接自动化框架
前端·网络·typescript·自动化