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或后端存储

效果如下:

收起

展开

全选

代码如下:

相关推荐
于慨17 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz17 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
从前慢丶17 小时前
前端交互规范(Web 端)
前端
像我这样帅的人丶你还17 小时前
别再让JS耽误你进步了。
css·vue.js
@yanyu66617 小时前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot
CHU72903517 小时前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序
GISer_Jing18 小时前
Page-agent MCP结构
前端·人工智能
王霸天18 小时前
💥别再抄网上的Scale缩放代码了!50行源码教你写一个永不翻车的大屏适配
前端·vue.js·数据可视化
小领航18 小时前
用 Three.js + Vue 3 打造炫酷的 3D 行政地图可视化组件
前端·github
@大迁世界18 小时前
2026年React大洗牌:React Hooks 将迎来重大升级
前端·javascript·react.js·前端框架·ecmascript