vue3-封装菜单组件
1、概述
在项目之中,一般我们的后台管理正常结构部分都是包括菜单部分,左侧菜单是必不可少的,菜单部分一般由以下几个部分组成
- 菜单标题
- 菜单图标
- 菜单子项
- 菜单折叠
我们可以简单的预览一下正常一个完整的后台管理的大致页面应该是什么样子:

2、结构搭建
接下来我们就在 vue3 之中搭建一个左侧的菜单组件,然后进行封装,在我们的项目之中我们选择的是国内目前最为流行的 ui 框架,element-plus,接下来我们就围绕他的左侧折叠面板和菜单进行开发和封装我们的菜单组件。
可以看出,菜单栏大致分为两类,一类是有子菜单的,一类是无子菜单的。我们可以对这两类进行分类,然后根据路由列表,动态渲染菜单栏。

之前我们搭建好了一个基础的 vue3 项目,并且引入了 element-plus,接下来我们就开始引入我们的菜单组件代码,这部分直接使用官方的就行。
然后我们看看引入官方默认提供给我们菜单的效果

3、菜单渲染
接下来我们就把我们后台管理部分的所有菜单全部导入进来,然后对菜单实施一个渲染,然后我们就可以看到完整的菜单结构了。
☞ 在 router=> index 之中先把我们的 admin(后台管理部分)的菜单隔离出来
这里隔离出来也是为了方便我自己的操作
☞ 然后在我们的后台菜单里面去拿这部分菜单的值,在组件 Menu=> leftMenu 部分封装我们这部分 admin 的值
- leftMenu 里面输出查看
☞ 查看输出的值,可以看到,这个时候我们已经拿到了我们需要的菜单,接下来就可以完善菜单了
☞ 渲染第一层菜单
菜单首先需要一个标题,接下来我们完善菜单,然后渲染第一层的菜单
在菜单使用部分进行渲染
查看效果,这个时候我们的第一层菜单已经封装好了

4、子菜单封装
我们封装好了第一层的菜单以后还不够,因为可能菜单的层级会有无数个,这个时候我们就需要把菜单写成嵌套组件
☞ src=> layout => leftAside => SideItem.vue
这里我们直接将我们之前的部分挪移过来进行一些简单的封装
☞ src=> layout => leftAside => index.vue
更换一下我们之前的组件主要的部分,父组件引入使用子组件
查看我们的效果

5、菜单事件完善
接下来我们完善一下菜单子组件的点击事件
6、菜单样式属性
el-menu上的属性显示
7、菜单过滤
在我们正常的菜单显示过程中,很多时候我们的菜单并不需要展示出来,这个时候我们菜单之中有个属性hidden来进行控制显示隐藏
- 路由信息配置
- 在菜单之中我们过滤一下
8、菜单设置
👉只保持一个子菜单的展开
👉设置折叠动画
感觉差距不大,效果不是很明显
👉 设置默认选中
接下来我们设置一下默认选中的菜单
这样我们默认选中菜单就设置好了,但是刷新以后无法选中我们的菜单,这个时候我们需要监听路由变化,然后根据地址设置选中的菜单
👉 src=> layout => leftAside => index.vue
更改一下activeMenu的值
路由之中也设置对应的部分,设置meta的activeMenu。
当我们设置一部分菜单并不展示到页面的时候,就可以直接显示高亮某一个菜单部分
9、菜单的展开和折叠
👉使用pinia持久化状态管理左侧菜单
接下来我们就用pinia持久化状态来管理左侧的菜单是否展开
存储一些关于客户在网站上面设置的主题数据
之前我们已经安装pinia,接下来我们直接来实现这一部分
👉添加store状态
store仓库状态管理目录下新建menuStore.js,负责管理菜单的选中状态
👉添加点击事件
去我们的任意组件之中添加折叠与展开事件,注意引入store
👉管理展开状态
这个时候我们已经可以控制菜单的展开和收起了,再进行抽离组件,就可以在我们的菜单组件中使用了
👉侧边栏宽度
调整好我们菜单的展开收起以后,接下来我们就可以根据我们的菜单状态来调整我们的侧边栏的宽度了
这里我们直接拿类控制即可
5921

被折叠的 条评论
为什么被折叠?



