正文
vue addRoutes路由动态加载
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
需求:增加权限控制,实现不同角色显示不同的路由导航
思路:每次登陆后请求接口返回当前角色路由
核心方法:vue-router2.2.0的addRoutes方法 + vuex
以下是我实现的获取菜单路由的方法,我将该方法的调用放在首页组件的生命钩子中,即便用户刷新浏览器清空了路由还是会重新调用接口获取,不至于会丢失。同时考虑到会有切换用户的可能,所以不将获取到的路由信息保存到cookie或者localstorage当中
获取菜单之前先判断routerState,避免多次请求, 我这里使用element-ui的导航菜单功能v-for循环this.myRouter参数即可显示动态路由导航
/**
* 获取菜单
*/
getMenu () {
if (this.$store.getters.routerState === false) {
// 清理已经存在的动态路由
this.clearDynamicRoute()
// 更改请求路由状态为true
this.$store.commit('SET_ROUTERSTATE', true)
getMyMenu().then((res) => {
if (res.code === '0') {
// 格式化路由,将数据转为addRoutes可接受的route格式数组
let myMenu = this.formatMenu(res.data.menu)
if (myMenu.length <= 0) { // 没有动态路由
return
}
for (let index = 0; index < myMenu.length; index++) {
// 将请求的路由先存放到options对象中
this.$router.options.routes.push(myMenu[index])
}
// 将完整需要显示的路由添加进去
this.$router.addRoutes(this.$router.options.routes)
// 这里将路由显示在页面上
this.MyRouter = this.$router.options.routes
}
// 在这里就可以打印出新路由
console.log(this.$router)
})
}
}