Vue实现动态菜单+动态路由(基于elementUI)

公司项目做整理需要将前端vue项目菜单修改成动态菜单+动态路由。

1.动态路由

了解需求后查看了package.json使用的是Vue.js 官方的路由管理器:vue-router。

1. 查看vue-router官方文档发现vue-router有 添加新路由规则的函数,函数有三个:

  • router.addRoutes(routes: Array<RouteConfig>)

动态添加更多的路由规则。参数必须是一个符合 routes 选项要求的数组。不过现已废弃。那我也就放弃了使用这个函数。

  • addRoute(route: RouteConfig): () => void

添加一条新路由规则。如果该路由规则有 name,并且已经存在一个与之相同的名字,则会覆盖它。

  • addRoute(parentName: string, route: RouteConfig): () => void

添加一条新的路由规则记录作为现有路由的子路由。如果该路由规则有 name,并且已经存在一个与之相同的名字,则会覆盖它。

分析:

可以看到第二个函数和第三个函数都是只能添加一条路由规则。 区别在于:第一个函数是新建或者覆盖已有的,第二个函数相当于在已有的路由父级中添加子路由。提供父路由的name即可。

2. 继续在文档中找到并查看RouteConfig对象,即动态添加路由方法我们需要传什么。如下图:

3. 我们需要的东西都有了,就可以开始写代码了,代码如下:

注意: 这样虽然可以实现但是会出现点击F5或手动刷新页面时出现404。 刷新会导致增加的动态路由失效,实际相当于重新读了一遍路由的配置。

解决bug思路: 每次跳转路由时判断是否是刷新。如果是刷新我们在动态增加一次路由。 路由数据可以存在sessionStorage中。

解决主要函数: 通过官方文档可以看到vue-router提供了全局前置守卫: router.beforeEach

方法有了,动手改造如下:

之前的代码修改如下:

路由.js添加如下代码:

这样就可以解决F5刷新页面时空白或404的问题了!

2.动态菜单

这里我们是基于elementUI的框架搭建。

动态菜单主要的就是查数据动态渲染。如果你的项目是两级或三级菜单直接用for循环就可以。但如果你的是四级五级菜单循环太冗余。推荐递归实现。

递归实现方法:

递归:子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己。

1. 找出自己也是循环使用的代码,自建一个组件

2. 引用自定义组件

3. 使用自定义组件

OK完工。以上就是Vue实现动态菜单+动态路由(基于elementUI)的全部内容,如果还有其他不懂的可以添加右下角微信,欢迎骚扰!

大家也可以点击我的gitee来获取我的其他项目源码。 拜拜!

实现动态路由需要在前端和后端两个方面进行处理,以下是使用VueElementUI和Spring Boot实现动态路由的代码示例: 前端代码示例: 1. 在Vue中,可以使用Vue Router来处理路由。首先需要在main.js中引入Vue Router并创建router实例,然后在路由配置文件中定义路由。在路由配置文件中,可以使用动态路由参数(例如:id)来处理动态路由: ```javascript // main.js import Vue from 'vue' import VueRouter from 'vue-router' import App from './App.vue' import router from './router' Vue.use(VueRouter) new Vue({ router, render: h => h(App) }).$mount('#app') // router.js import VueRouter from 'vue-router' import Home from './views/Home.vue' import About from './views/About.vue' import Dynamic from './views/Dynamic.vue' const router = new VueRouter({ routes: [ { path: '/', name: 'home', component: Home }, { path: '/about', name: 'about', component: About }, { path: '/dynamic/:id', name: 'dynamic', component: Dynamic } ] }) export default router ``` 2. 在ElementUI中,可以使用Menu组件来实现动态路由。首先需要在App.vue中引入Menu组件,并在Menu组件中定义路由菜单。在路由菜单中,可以使用动态路由参数(例如:id)来处理动态路由: ```html <template> <div id="app"> <el-container> <el-aside> <el-menu :default-active="activeIndex" class="el-menu-vertical-demo" @select="handleSelect"> <el-menu-item index="/"> <i class="el-icon-menu"></i> <span>Home</span> </el-menu-item> <el-menu-item index="/about"> <i class="el-icon-document"></i> <span>About</span> </el-menu-item> <el-menu-item v-for="item in dynamicRoutes" :key="item.path" :index="item.path"> <i class="el-icon-folder"></i> <span>{{ item.name }}</span> </el-menu-item> </el-menu> </el-aside> <el-main> <router-view></router-view> </el-main> </el-container> </div> </template> <script> import { Menu } from 'element-ui' export default { name: 'App', components: { 'el-menu': Menu }, data() { return { activeIndex: '/', dynamicRoutes: [] } }, created() { this.dynamicRoutes = [ { path: '/dynamic/1', name: 'Dynamic1' }, { path: '/dynamic/2', name: 'Dynamic2' } ] }, methods: { handleSelect(index) { this.activeIndex = index this.$router.push(index) } } } </script> ``` 后端代码示例: 1. 在Spring Boot中,可以使用@RestController注解来定义控制器,并在控制器中定义动态路由。在动态路由中,可以使用@PathVariable注解来处理动态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值