vite+vue3中能否实现完全的动态路由?
我现在是这样写的
import {createRouter, createWebHistory, RouteLocationNormalized} from 'vue-router';
import { jurisdictionStore } from '../stores/jurisdiction.ts';
import {isNotEmptyString} from "../utils/tool.ts";
import {show, showLoading} from '../utils/message.ts';
import { getRouterList } from '../api/routerApi.ts';
interface Meta {
label: string
}
interface Routes {
path: string,
name?: string,
component: Function,
meta: Meta
}
export const routes : Routes[] = [
{
path: '/admin/404',
// @ts-ignore
component: () : string => import('../pages/error/Admin404.vue'),
meta: {
label: '404-找不到页面'
}
},
{
path: '/404',
name: '404-找不到页面',
// @ts-ignore
component: () : string => import('../pages/error/404.vue'),
meta: {
label: '404页面'
}
}
];
const router = createRouter({
history: createWebHistory(),
// @ts-ignore
routes: routes
});
router.beforeEach((to : RouteLocationNormalized, from : RouteLocationNormalized) : void => {
console.log(to,from);
// @ts-ignore
let jurisdictionId : number = jurisdictionStore().getJurisdictionId.value;
getRouterList(jurisdictionId).then(response => {
for (let i : number = 0; i < response.length; i++) {
let componentPath : string = '../pages' + response[i].component;
routes.push({
...response[i],
// @ts-ignore
component: () : string => import(componentPath)
});
}
console.log(routes);
}).catch(err => {
console.log('错误原因: ' + err.message);
show('error','获取路由列表失败,请刷新重试!');
showLoading(false);
});
});
router.afterEach((to : RouteLocationNormalized) : void => {
let title = to.meta.title;
// @ts-ignore
if (isNotEmptyString(title)) {
// 修改html的标题为meta中的名称
// @ts-ignore
document.title = title;
}
})
export default router;
我现在获取到的结果是这样的
[
{
path: '/admin/404',
// @ts-ignore
component: () : string => import('../pages/error/Admin404.vue'),
meta: {
label: '404-找不到页面'
}
},
{
path: '/404',
name: '404-找不到页面',
// @ts-ignore
component: () : string => import('../pages/error/404.vue'),
meta: {
label: '404页面'
}
},
{
path: '/',
name: 'index',
// @ts-ignore
component: () : () => import(__vite__injectQuery(componentPath, 'import')),
meta: {
label: '首页'
}
}
]
有什么办法做到吗?