vite import模块
let Module = import.meta.glob(“@/views/**/*.vue”);
//懒加载组件
function loadComponent(url: string) {
let path = Module[/src/views/${url}/index.vue
];
return path;
}
export function dynamicRouter(routers: RouteRecordRawNew[]): RouteRecordRawNew[] {
const list: RouteRecordRawNew[] = []
routers.forEach((itemRouter, index) => {
// 从本地找组件
list.push({
...itemRouter,
component: loadComponent(itemRouter.component) //没找到则用默认框架组件
})
// 是否存在子集
if (itemRouter.children && itemRouter.children.length) {
list[index].children = dynamicRouter(itemRouter.children);
}
})
return list
}
// 防止首次或者刷新界面路由失效
let registerRouteFresh = true
router.beforeEach((to, from, next) => {
if (registerRouteFresh) {
// addRoute允许带children添加,所以循环第一层即可
dynamicRouter(routesList).forEach((itemRouter) => {
router.addRoute(itemRouter as RouteRecordRaw)
})
next({ …to, replace: true })
registerRouteFresh = false
} else {
next()
}
})