处理json生成vue需要的格式
/**
* 动态添加路由
*/
function setRouter(data) {
let ro = [];
let obj = {
path: "/Home",
name: "首页",
component: resolve => require(["@/views/Home.vue"], resolve),
children: []
};
data.forEach(function(value) {
let view = value.component;
let path = value.path;
value.path = "/" + path;
value.component = resolve => require([`@/views${view}`], resolve);
obj.children.push(value);
});
ro.push(obj);
return ro;
}这里注意一下 require 目前不支持完全动态传参
value.component = resolve => require([`@/iews${view}`], resolve); 正确的!!!
require([`@${路径}`]) 或者 require([`${路径}`]) 都是无法找到路由
json数据如下:

在vuex里声明一个状态 routerStatus 保存是添加路由还是跳转页面然后在路由守卫里如下
/**
* @param {Object} to 即将要进入的目标 路由对象
* @param {Object} from 当前导航正要离开的路由
* @param {Function} next 一定要调用该方法来 resolve 这个钩子。
*/
router.beforeEach((to, from, next) => {
const vm = store;
if (to.path != "/") {
//判断登录信息是否为空
if (Object.keys(vm.getters.getLoginInfo).length != 0) {
//判断是刷新页面且添加路由还是跳页面
if (vm.state.routerStatus) {
next();
} else {
//判断取到的路由数据不能为空
let data = storage.ss.get("login");
if (data != null) {
vm.state.routerStatus = true;
let ro = setRouter(data.routerMenu);
router.addRoutes(ro);
next({ ...to, replace: true });
}
}
} else {
next("/");//跳转登录
}
}
next();
});
评论区