vue-router根据权限动态添加相关路由

简介: 在有权限的项目里,需要根据权限动态添加路由,使用addRoutes方法import Vue from 'vue'import Router from 'vue-router'import Store from '.

在有权限的项目里,需要根据权限动态添加路由,使用addRoutes方法

import Vue from 'vue'
import Router from 'vue-router'
import Store from '../store'

import routes, {asyncRouterMap} from './routers.js'
Vue.use(Router)

let router = new Router({
  // mode: 'history',
  scrollBehavior (to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
    } else {
      return { x: 0, y: 0 }
    }
  },
  routes
})
let flag = true // 只动态添加一次路由,防止进入回调地狱,当然也可以根据别的状态来判断
router.beforeEach((to, from, next) => {
  if (to.path === '/login') {
    next()
  } else {
    if (flag) {
      flag = false
      Store.dispatch('getMenu').then(() => {
        let routes = filterRouter(asyncRouterMap, Store.state.menuList)
        router.addRoutes(routes)
        next({...to, replece: true}) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
      }).catch(() => {
        next({path: '/login'})
      })
    } else {
      next()
    }
  }
})

const filterRouter = (asyncRouter, menu) => {
  asyncRouter.children = asyncRouter.children.filter(item => {
    return menu.some(i => {
      if (i.children && i.children.length) {
        return i.children.some(k => {
          return k.path === item.path
        })
      } else {
        return i.path === item.path
      }
    })
  })
  
  return [asyncRouter]
}

export default router
相关文章
|
2月前
|
资源调度 JavaScript 前端开发
路由管理:Vue Router的使用和配置技巧
【10月更文挑战第21天】路由管理:Vue Router的使用和配置技巧
46 3
|
2月前
|
JavaScript API
vue 批量自动引入并注册组件或路由等等
【10月更文挑战第12天】 vue 批量自动引入并注册组件或路由等等
|
2月前
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
863 0
|
2月前
|
JavaScript 前端开发 UED
vue中vue-router路由懒加载(按需加载)的作用以及常见的实现方法
vue中vue-router路由懒加载(按需加载)的作用以及常见的实现方法
209 1
|
3月前
|
JavaScript
vue项目中使用vue-router进行路由配置及嵌套多级路由
该文章详细说明了如何在Vue项目中配置和使用vue-router进行单页面应用的路由管理,包括设置嵌套路由和实现多级路由导航的示例。
vue项目中使用vue-router进行路由配置及嵌套多级路由
|
2月前
|
JavaScript 前端开发 UED
|
2月前
|
JavaScript 前端开发 API
前端技术分享:Vue.js 动态路由与守卫
【10月更文挑战第1天】前端技术分享:Vue.js 动态路由与守卫
|
2月前
|
资源调度 JavaScript UED
如何使用Vue.js实现单页应用的路由功能
【10月更文挑战第1天】如何使用Vue.js实现单页应用的路由功能
|
2月前
|
JavaScript 前端开发
vue尚品汇商城项目-day01【4.完成非路由组件Header与Footer业务】
vue尚品汇商城项目-day01【4.完成非路由组件Header与Footer业务】
40 2
|
1月前
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
78 0
下一篇
DataWorks