欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue-router的addRoute方法实现权限控制

程序员文章站 2022-03-29 08:15:06
...

在项目实践中,往往需要用户登录后由后端返回用户的权限,来动态配置路由,vue-router提供了两个方法router.addRoutes(),router.addRoute()可以进行动态路由配置,这里需要注意的是vue-router的options属性并不是响应式的,在添加路由规则后,router.options.routes属性不会改变,目前,如果需要更新router.options.routes,则需要手动更改。

router.addRoutes 添加多条新路由规则

router.addRoutes(routes: Array<RouteConfig>)

动态添加更多的路由规则。参数必须是一个符合 routes 选项要求的数组
已废弃

router.addRoute 添加一条新路由规则

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

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

addRoute方法可用于为现有路由添加子路由规则

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

下面是在vue中动态添加了路由规则的小例子,来演示router.addRoute的用法

<!doctype html>
<html lang="Zh-cn">
<head>
    <meta charset="UTF-8">
    <title>addRoute Demo</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-view></router-view>
</div>
<script>

const router = new VueRouter({
  mode: 'hash',
  routes: [
    { path: '/login', component: { template: `<div>login</div>` } },
    { path: '/404', component: { template: `<div>error 404</div>` } }
  ]
})
new Vue({
  el: '#app',
  router,
  created () {
    console.log(this.$router)
    console.log('一、配置路由index')
    const routes = this.$router.options.routes
    console.log(1, routes)
    const indexRoute = {
      name: 'index',
      path: '/',
      component: { template: `<div>layout<router-view></router-view></div>` }
    }
    this.$router.addRoute(indexRoute) // 动态添加路由
    routes.splice(0, 0, indexRoute) // 手动更新路由的options属性
    console.log(2, routes)

    console.log('二、添加子路由')
    this.$router.addRoute('index', {
      path: 'a',
      component: { template: `<div>a</div>` }
    })
    console.log(routes)
  }
})
</script>
</body>
</html>

参考:https://router.vuejs.org/zh/api/#router-addroutes

在项目实践时,通常在用户登录后获取到用户的权限表,可以将这些数据保存到前端(storage和vuex),可以在项目的根组件中将保存的路由记录通过addRoute方法添加到router中去。