12 使用Vue+Vue-router+el-menu实现菜单功能实战

本文是Vue+Vue-router+el-menu实现菜单功能的实战教程,包括基于el-menu组件创建菜单,自研tg-menu组件的实现,以及项目进度汇报。详细介绍了添加路由数据、el-menu组件的使用,以及自研菜单组件的数据维护、功能实现等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

上节回顾

上一小节我们使用H5+CSS3实现了管理平台的架构布局,并且通过Vuex的使用,获取到前端数据本地化存储的username,绑定到右上角进行全局展示。还不了解上下文的同学可以回顾一下 使用Vue+Vuex+CSS3完成管理端响应式架构模板实战 。

本节介绍

本小节已经是专栏的第10篇博客了,我们将继续维护添加Vue-router的路由数据,这些路由都是后续实战业务的真实路由了,在添加部分路由的同时,我们将借助ElementUI的el-munu组件,来实现左侧菜单功能的实战。其实使用el-menu并非重点,我们只是做一个基本使用,重点是我们将自研实现一个自己的tg-menu组件,用来替换el-menu组件,块一起来看看吧。

目录

前言

上节回顾

本节介绍

一、基于el-menu组件的菜单功能

1. 添加路由数据

2. 路由属性的介绍 

 3. 引入el-menu,开发菜单组件

二、自研tg-menu组件的菜单

1. 引入tg-menu组件

2. 引入路由数据,维护菜单组件数据

3. 无子级菜单和有子级菜单的区分

4. 当前菜单的高亮展示

5. tg-munu组件完整代码

6. tg-memu菜单组件包含的功能 

三、专栏进度汇报

1. 目前专栏的博客进度

2. 前端部分的内容架构进展

3. 前端部分代码目录进展

<think>我们正在使用Vue2,所以路由配置会有所不同。在Vue2中,我们使用Vue Router 3,而引用[1]中展示的是Vue Router 4(用于Vue3)的配置。因此,我们需要调整路由配置的写法。 目标:实现一个头部导航,中间是系统名称,两侧是导航项,支持多级路由(即导航项可能有下拉菜单) 步骤: 1. 配置路由:在Vue2项目中,我们需要定义路由,并为每个路由添加meta信息,如title、icon等。同时,为了区分左右导航,我们可以给路由添加一个position属性(例如:'left'或'right')来指定它出现在哪一侧。 2. 创建布局组件:使用Element UI的布局组件(el-container, el-header, el-main)和导航菜单组件(el-menu, el-menu-item, el-submenu)。 3. 根据路由生成菜单:在布局组件的模板中,使用两个el-menu(一个在左侧,一个在右侧),遍历路由配置,根据position属性生成对应的菜单项。对于有子路由的项,生成下拉菜单el-submenu)。 4. 样式调整:使用Flex布局使头部分为三部分(左中右),并确保中间的系统名称居中。 注意:在Vue2中,我们使用`vue-router@3`,路由配置中的`children`用于嵌套路由,同时我们也可以用它来生成多级菜单。 下面是一个具体的实现方案: 一、路由配置示例(/src/router/index.js): ```javascript import Vue from 'vue'; import Router from 'vue-router'; Vue.use(Router); export default new Router({ routes: [ { path: '/', redirect: '/dashboard' // 默认重定向 }, { path: '/dashboard', name: 'Dashboard', component: () => import('@/views/Dashboard.vue'), meta: { title: '首页', icon: 'el-icon-s-home', position: 'left' // 指定在左侧导航 }, children: [ // 子路由,用于生成下拉菜单 { path: 'overview', name: 'Overview', component: () => import('@/views/Overview.vue'), meta: { title: '概览' } }, { path: 'detail', name: 'Detail', component: () => import('@/views/Detail.vue'), meta: { title: '详情' } } ] }, { path: '/monitor', name: 'Monitor', component: () => import('@/views/Monitor.vue'), meta: { title: '监控', icon: 'el-icon-monitor', position: 'left' } }, { path: '/settings', name: 'Settings', component: () => import('@/views/Settings.vue'), meta: { title: '设置', icon: 'el-icon-setting', position: 'right' // 指定在右侧导航 } }, { path: '/help', name: 'Help', component: () => import('@/views/Help.vue'), meta: { title: '帮助', icon: 'el-icon-question', position: 'right' } } ] }); ``` 二、布局组件(例如:/src/layout/Layout.vue): 在这个组件中,我们将创建头部导航,并分为左、中、右三部分。 ```html <template> <el-container style="height: 100vh;"> <el-header class="header"> <!-- 使用flex布局,分为三部分 --> <div class="header-container"> <!-- 左侧导航 --> <el-menu :default-active="activeMenu" mode="horizontal" class="left-menu" background-color="#f5f5f5" text-color="#333" active-text-color="#409EFF"
评论 146
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

经海路大白狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值