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

效果如下:

收起

展开

全选

代码如下:

相关推荐
liangshanbo12151 分钟前
Webpack 常见 Plugin 面试题
前端·webpack·node.js
xxwl5853 分钟前
vue3的入门学习
前端·vue.js·学习
用户847172102844 分钟前
.shot 文件格式规范
前端·后端
web打印社区6 分钟前
政务办事大厅:叫号小票、办理回执网页怎么静默出纸
前端·javascript·vue.js·pdf·html·政务
C++ 老炮儿的技术栈28 分钟前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
aixingpan39 分钟前
aixingpan.cn API开发文档:api_docs_bichart_natalvssecondary2接口指南
前端·php
MZ_ZXD0011 小时前
【关注可白嫖源码】--课程设计--毕业设计-- 29210 Vue.js 3+Springboot中药材基本信息与图片查询系统
javascript·spring boot·课程设计·毕设·大作业·程序开发·毕设代做
liangshanbo12151 小时前
Webpack Tree Shaking 面试题整理
前端·webpack·node.js
斯内普吖1 小时前
(开源)水果蔬菜商城实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
Ai-_Man1 小时前
您您这可以把Google AI Studio的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑