参考 https://blog.csdn.net/qq_34160246/article/details/80322036
动态路由控制权限
login.vue
let dR = new Array(); for (let i = 0; i < dynamicRouter.length; i++) { //第一层循环遍历动态路由表的每一个路由 let aside_list = this.aside_list for (let j = 0; j < aside_list.length; j++) { if (dynamicRouter[i].path === aside_list[j].path && aside_list[j].isShow) { // console.log(dynamicRouter[i]) dR.push(dynamicRouter[i]); // 符合条件的路由信息就放进数组里 if (!this.xjw) { // this.firstShowPath = dynamicRouter[i] dR.push(dynamicRouter[2]); this.xjw = true } } else if (aside_list[j].path.indexOf('x') && aside_list[j].isShow) { if (!this.first) { // 符合条件的路由的福袋必须访问的路由就放进数组里 dR.push(dynamicRouter[0]); dR.push(dynamicRouter[1]); this.first = true } } else if ( (aside_list[j].path.indexOf('xx') || aside_list[j].path.indexOf('xxx') || aside_list[j].path.indexOf('xxxx')) && aside_list[j].isShow) { if (!this.second) { dR.push(dynamicRouter[1]); this.second = true } } } } this.xjw = null this.first = null this.second = null // console.log(dR) this.$router.addRoutes(dR.concat([{ //这里调用addRoutes方法,动态添加符合条件的路由 path: '*', redirect: '/404' //所有不匹配路径(*)都重定向到404,为什么写在这里而不放到静态路由表里可以查看“前端路上”的文章 }])); this.$router.push(this.firstShowPath);
app.vue
if (!isLogin) { return this.$router.push('/login'); } else { let dR = new Array(); for (let i = 0; i < dynamicRouter.length; i++) { let aside_list = this.get_aside_list.aside_list // console.log(dynamicRouter[i]) for (let j = 0; j < aside_list.length; j++) { if (dynamicRouter[i].path === aside_list[j].path && aside_list[j].isShow) { // console.log(dynamicRouter[i]) dR.push(dynamicRouter[i]); //符合条件的路由信息就放进数组里 if (!this.xjw) { dR.push(dynamicRouter[2]); this.xjw = true } } else if (aside_list[j].path.indexOf('x') && aside_list[j].isShow) { if (!this.first) { dR.push(dynamicRouter[0]); dR.push(dynamicRouter[1]); this.first = true } } else if ( (aside_list[j].path.indexOf('xx') || aside_list[j].path.indexOf('xxx') || aside_list[j].path.indexOf('xxxx')) && aside_list[j].isShow) { if (!this.second) { dR.push(dynamicRouter[1]); this.second = true } } } } this.xjw = null this.first = null this.second = null // console.log(dR) this.$router.addRoutes(dR);