vue动态加载路由3种方式(思路)

本文探讨了在后管系统中处理不同角色和权限的动态路由方法。方法一为注册所有路由并按权限显示,但存在安全风险;方法二是前端预设角色路由,需频繁更新代码。推荐方法三是动态生成路由映射,通过后台返回的菜单URL匹配前端组件,实现灵活且安全的角色权限管理。
摘要由CSDN通过智能技术生成

使用场景:后管系统,处理不同角色,不同权限,显示不同菜单。
目的:根据需求,动态加载路由,处理后台返回的不同菜单权限。
方法

  • 方法一:注册所有路由,根据后台返回菜单数据,显示菜单。

弊端:路由全部注册,菜单没有显示;用户可以手动更改url值,依然会显示当前组件。

  • 方法二:前端手动写好,根据不同的角色,创建多个不同的路由,根据登录的角色,动态的加载某个数组。

弊端:如果后台新增角色,那么只有修改前端代码,重新部署。

  • 方法三(推荐):菜单动态生成路由映射
    菜单->url->路由->path->component(数组,routes)
    后台返回的菜单,有url;url对应的是路由里面的path;path对面不同的组件。

    1. 菜单中有加载组件的名称component(名称/路径必须和前端写好的一致,不可移动组件位置)
    2. (推荐)直接根据菜单的url。查找前端代码中的对应关系。生成数组routes

总结:根据业务需求自行选择

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,实现Vue动态路由菜单的思路如下: 1. 在前端配置好整体路由文件,将静态和动态路由分别存储在文件中。 2. 根据后台返回的路由名称数组,解析生成路由配置文件。 3. 将解析出的路由配置文件加载到router上。 4. 根据router生成菜单项。 下面是一个示例代码,演示了如何实现Vue动态路由菜单的思路: ```javascript // 1. 在前端配置好整体路由文件,将静态和动态路由分别存储在文件中 // staticRoutes.js const staticRoutes = [ { path: '/', name: 'Home', component: Home }, // 其他静态路由配置 ]; // dynamicRoutes.js const dynamicRoutes = [ { path: '/role', name: 'Role', component: Role, meta: { requiresAuth: true } // 需要权限验证的路由 }, // 其他动态路由配置 ]; // 2. 根据后台返回的路由名称数组,解析生成路由配置文件 // parseRoutes.js function parseRoutes(routeNames) { const routes = []; routeNames.forEach(routeName => { // 根据routeName解析生成对应的路由配置 const route = { path: `/${routeName}`, name: routeName, component: () => import(`@/views/${routeName}`), meta: { requiresAuth: true } // 需要权限验证的路由 }; routes.push(route); }); return routes; } // 3. 将解析出的路由配置文件加载到router上 // router.js import Vue from 'vue'; import Router from 'vue-router'; import staticRoutes from './staticRoutes'; import dynamicRoutes from './dynamicRoutes'; Vue.use(Router); const router = new Router({ routes: staticRoutes }); // 在获取到后台返回的路由名称数组后,解析生成动态路由配置 const routeNames = ['Role']; // 假设后台返回的路由名称数组为['Role'] const parsedRoutes = parseRoutes(routeNames); // 将动态路由配置添加到router中 router.addRoutes(parsedRoutes); // 4. 根据router生成菜单项 // Menu.vue <template> <div> <ul> <li v-for="route in routes" :key="route.name"> <router-link :to="route.path">{{ route.name }}</router-link> </li> </ul> </div> </template> <script> export default { data() { return { routes: [] // 存储菜单项的数组 }; }, created() { // 在获取到后台返回的路由名称数组后,解析生成动态路由配置 const routeNames = ['Role']; // 假设后台返回的路由名称数组为['Role'] const parsedRoutes = parseRoutes(routeNames); // 将动态路由配置添加到router中 this.$router.addRoutes(parsedRoutes); // 更新菜单项数组 this.routes = this.$router.options.routes; } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值