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

效果如下:

收起

展开

全选

代码如下:

相关推荐
我命由我123451 小时前
微信小程序 - 避免在 data 初始化中引用全局变量
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
可爱又迷人的反派角色“yang”1 小时前
Mysql数据库(二)
运维·服务器·前端·数据库·mysql·nginx·云计算
低保和光头哪个先来1 小时前
基于 Vue3 + Electron 的离线图片缓存方案
前端·javascript·electron
国服第二切图仔1 小时前
Electron for 鸿蒙PC项目实战之拖拽组件示例
javascript·electron·harmonyos
天天向上10241 小时前
Vue 配置一次打包执行多个命令,并将分别输出到不同的文件夹
前端·javascript·vue.js
BD_Marathon1 小时前
【JavaWeb】HTML——超链接标签
前端·html
彭于晏爱编程1 小时前
🐻 Zustand 使用指南:从 0 到精通的最快路线
前端
장숙혜1 小时前
Vue DevTools 速通-掌握开发调试器
前端·javascript·vue.js
谢尔登1 小时前
为什么React 17开始无需在组件中引入React了?
前端·react.js·前端框架