vue3 + element-plus 后台管理项目 递归动态渲染导航栏

本文介绍了如何在Vue3结合Element-Plus的后台管理项目中,使用MenuItem组件递归地动态渲染导航栏。主要内容包括MenuBar组件的使用,通过menuData数据结构来构建菜单,并展示了template、js和css代码实现细节。

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

vue3 + element-plus 后台管理系统动态渲染导航栏

MenuBar组件

	<!-- element-plus 组件 -->
    <el-menu
      default-active="1"
      class="el-menu-vertical-demo"
      @open="handleOpen"
      @close="handleClose"
      unique-opened
    >
      <MenuItem :menuList="state?.menuData" />
    </el-menu>

menuData数据

menuData: <any>[
        {
   
   
          id: '1',
          path: '/CityShow',
          name: 'HomeFilled',
          label: '首页',
          icon: 'HomeFilled',
          url: '/CityShow',
          router: '',
          children: [],
        },
        {
   
   
 
### Element Plus 导航栏使用教程 Element Plus 提供了一套完整的导航组件,包括 `Menu` 组件用于实现侧边栏菜单、顶部导航条等。下面是一个基于 Vue 3Element Plus 的简单导航栏示例。 #### 安装依赖 为了能够正常使用 Element Plus 中的 Menu 组件以及其他相关功能模块,在项目初始化阶段需要安装必要的包: ```bash npm install element-plus vue-router@4 pinia axios ``` #### 创建基础布局结构 定义一个基本的应用程序框架来承载页面内容以及左侧的菜单区域[^1]。 ```html <template> <el-container style="height: 100%;"> <!-- 左侧菜单 --> <el-aside width="200px"> <NavMenu /> </el-aside> <!-- 主体部分 --> <el-main>Main Content</el-main> </el-container> </template> ``` #### 实现动态路由匹配与菜单项关联 通过配置 Vue Router 来设置应用内的不同路径,并将其映射到对应的视图组件上;同时利用 Pinia 或 Vuex 进行状态管理以便于维护当前激活的菜单选项。 ```javascript // src/router/index.js import { createRouter, createWebHistory } from &#39;vue-router&#39; const routes = [ { path: &#39;/&#39;, name: &#39;Home&#39;, component: () => import(&#39;@/views/Home.vue&#39;) }, // 更多路由... ] const router = createRouter({ history: createWebHistory(), routes, }) export default router; ``` #### 构建自定义菜单组件 编写 NavMenu.vue 文件以渲染出带有链接跳转能力的列表项,支持嵌套路由显示子级菜单[^2]。 ```html <!-- src/components/NavMenu.vue --> <template> <el-menu :default-active="$route.path" class="el-menu-vertical-demo" @select="handleSelect"> <MenuItem v-for="(item,index) in menuData" :key="index" :menu-item="item"/> </el-menu> </template> <script setup lang="ts"> import MenuItem from &#39;./MenuItem.vue&#39;; import { useRoute } from "vue-router"; defineProps<{ menuData?: Array<any>; }>(); function handleSelect(index:string){ console.log(`selected ${index}`); } </script> ``` 对于更复杂的场景可以考虑采用递归的方式处理多层嵌套的数据源,从而让开发者更容易地扩展应用程序的功能特性。 #### 配置 API 请求拦截器 (可选) 如果涉及到权限验证等功能,则可以在 Axios 上添加请求前后的钩子函数来进行统一的身份校验逻辑控制[^3]。 ```typescript // src/utils/request.ts import axios from &#39;axios&#39;; axios.interceptors.request.use( config => { const token = localStorage.getItem(&#39;token&#39;); if(token && !config.headers[&#39;Authorization&#39;]){ config.headers[&#39;Authorization&#39;] = `Bearer ${token}`; } return config; }, error => Promise.reject(error)); export default axios; ``` 以上就是有关如何在 Vue 3 应用中集成 Element Plus 并创建响应式的导航栏的基本介绍。实际开发过程中可根据具体需求调整样式和交互效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值