【vue2】使用vue-admin-template动态添加路由的思路/addRoutes的使用

在这里插入图片描述
😉博主:初映CY的前说(前端领域) ,📒本文核心:用原生js实现省市区联动

【前言】在通用的后台管理项目的开发中,不仅仅是会涉及到对表单数据等的增删改查操作还会涉及到一些关于权限管理的问题。我们将基于一个RBAC的思维模式进行一个针对于用户权限来判断是否显示出某个页面/页面中的某一个结构。(RBAC思想精简就是说:我们给用户添加角色,给角色添加权限。)

⭐一、 addRoutes的使用

作用:动态的添加我们的路由到总的路由实例当中去。

  • 1 .直接在我们初始化好的HomeView文件中写下个按钮绑定事件
<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
    <button @click="hAddRoute" style="width: 300px;font-size: 50px;">addRoute</button>
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
import router from '@/router'

export default {
  name: 'HomeView',
  components: {
    HelloWorld
  },
  methods: {
    hAddRoute () {
      router.addRoutes([{
        path: '/abcD',
        component: () => import('@/views/abcD')
      }])
    }

  }
}
</script>

  • 2.在相对应对的路由中写下我们动态追加进去的组件
    在views/abcD中写下
<template>

    <div class="cbcd">
    <h1>这个是abcD的页面</h1>

  </div>
</template>

是的,这样的话我们就完成了我们路由的动态添加,来测试下
在这里插入图片描述
当我在路径中输入abcD路径时没有出现所对应的页面
在这里插入图片描述
当我点击addRoute的时候,我们就将这个路径所对应的组件挂载到当前的路由实例当中了
在这里插入图片描述
当我再次在地址栏追加页面的时候我们就成功的访问到了这个路由所对应的页面喽~

⭐二、 动态路由设置思路

  • 1.根据登录时候的用户信息从接口中提取出该用户的权限信息(可以访问哪些页面)
  • 2.修改router/index中的路由信息,写下我们的动态路由表(全部的动态表)
  • 3.用户点击登录的时候,调用vuex当中的异步请求进行一个token的存储
  • 4.有token就代表有身份了,根据token是否存在再去路由守卫中判断有没有获取当前用户信息,如果没有则就调用用户信息的一个相关接口
    此刻提取接口信息中关于访问权限的相关组件名称在vuex中return返回出来这个包含路由权限相关的数组
  • 5.拿到这个返回值之后(假设记作为menus),我们与我们的动态路由表进行一个过滤的操作,将动态路由表进行一个filter过滤,返回menus中包括的动态路由表标识信息
  • 6.将这个过滤出来的结果进行一个router.addRoutes(过滤之后剩下来的值)
  • 7.同时将过滤出来的动态旅游表再存入vuex中,可写一个computed方法用来将我们的静态动态路由表进行一个结合,随后遍历当前动静表即可完成路由信息的渲染。

注意点:
一、页面刷新后空白需要加上:

   next({ ...to, replace: true })

二、动态生成的路由表不可在this.$router.options.routes中被获取,需要从vuex中过去我们的动态表

至此本文结束,愿你有所收获! 期待大家的关注与支持! 你的肯定是我更新的最大动力!!!

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
要在vue-admin-template添加角色权限由,可以按照以下步骤进行操作: 1. 在src目录下创建一个新的文件夹,例如"permission",用于存放与权限相关的文件。 2. 在permission文件夹中创建一个新的文件,例如"permission.js",用于定义权限相关的函数和由。 3. 在permission.js文件中,首先导入需要的工具和由配置文件。例如: ```javascript import { constantRoutes } from '@/router' ``` 4. 创建一个函数,用于根据角色权限动态生成由。例如: ```javascript export function generateRoutes(roles) { // 根据角色权限进行由过滤 const accessedRoutes = constantRoutes.filter(route => { if (hasPermission(roles, route)) { if (route.children && route.children.length) { route.children = filterAsyncRoutes(route.children, roles) } return true } return false }) return accessedRoutes } ``` 5. 创建一个辅助函数,用于判断当前角色是否有权限访问某个由。例如: ```javascript function hasPermission(roles, route) { if (route.meta && route.meta.roles) { return roles.some(role => route.meta.roles.includes(role)) } else { return true } } ``` 6. 最后,在permission.js文件中导出生成的由。例如: ```javascript export default { generateRoutes } ``` 7. 在src/router/index.js文件中,导入permission.js并使用生成的由。例如: ```javascript import permission from '@/permission/permission' // 在由的beforeEach钩子中根据角色权限动态生成由 router.beforeEach(async(to, from, next) => { const hasRoles = store.getters.roles && store.getters.roles.length > 0 if (hasRoles) { next() } else { try { // 获取角色信息,可以根据实际情况修改 const { roles } = await store.dispatch('user/getInfo') // 根据角色权限动态生成由 const accessedRoutes = permission.generateRoutes(roles) // 添加生成的由 router.addRoutes(accessedRoutes) // 确保addRoutes完成 next({ ...to, replace: true }) } catch (error) { // 获取角色信息失败时的处理,可以根据实际情况修改 await store.dispatch('user/resetToken') next(`/login?redirect=${to.path}`) } } }) ``` 这样,根据用户的角色权限,动态生成的由将会添加由配置中,用户只能访问其有权限的页面。请根据实际情况修改相关代码。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

初映CY的前说

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

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

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

打赏作者

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

抵扣说明:

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

余额充值