java小菜机一枚 2023-10-25 19:57 采纳率: 91.3%
浏览 8
已结题

vite+vue3动态配置路由

我在路由这配置的是动态获取路由的配置信息,我使用的技术栈是vite+vue3,现在获取到了数据,但是vite会来操作我的数据,现在在component哪一块跟静态配置的路由不一样,导致我现在页面显示空白

import {createRouter, createWebHistory, NavigationGuardNext, RouteLocationNormalized, Router} from 'vue-router';
import {isNotEmptyString} from "../utils/toolUtil.ts";
import {jurisdictionStore} from "../stores/jurisdiction.ts";
import {getRouterList} from "../api/routerApi.ts";
import {show, showLoading} from "../utils/messageUtil.ts";

interface Meta {
    title: string
}

interface Routes {
  path: string,
  name?: string,
  component: Function,
  meta: Meta,
  children?: Routes[]
}

export const routes : Routes[]  = [
    {
        path: '/admin/404',
        // @ts-ignore
        component: () : string => import('../pages/error/Admin404.vue'),
        meta: {
            title: '404-找不到页面'
        }
    },
    {
        path: '/404',
        name: '404-找不到页面',
        // @ts-ignore
        component: () : string => import('../pages/error/404.vue'),
        meta: {
            title: '404页面'
        }
    }
];

const router : Router = createRouter({
    history: createWebHistory(),
    // @ts-ignore
    routes: routes,
    dynamic: true
});

router.beforeEach((to : RouteLocationNormalized,from : RouteLocationNormalized,next : NavigationGuardNext) => {
    console.log(to,from)
    // 获取权限id
    // @ts-ignore
    let jurisdictionId = jurisdictionStore().getJurisdictionId.value;
    getRouterList(jurisdictionId).then(response => {
        for (let i : number = 0; i < response.length; i++) {
            let route = {
                path: response[i].path,
                name: response[i].name,
                // @ts-ignore
                component: () : string => import(`../pages${response[i].component}`),
                meta: response[i].meta
            };
            router.addRoute(route);
            showLoading(false);
        }
        next();
    }).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;
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-25 23:29
    关注

    【以下回答由 GPT 生成】

    解决方案

    根据提供的代码和问题描述,问题可能出现在动态配置路由时使用了异步组件加载的方式,而默认情况下,在 Vue.js 中使用异步组件加载时,需要使用 @next 版本的 vue-router。以下是解决该问题的步骤:

    1. 确保你的项目中已经安装了 @next 版本的 vue-router ,可以使用以下命令进行安装:
    npm install vue-router@next
    
    1. 确保你的项目中已经正确安装和配置了 Vite,你可以使用以下命令进行安装:
    npm install --global create-vite     # 全局安装 create-vite
    npx create-vite your-project-name    # 创建项目
    cd your-project-name                 # 进入项目目录
    npm install                          # 安装依赖
    npm run dev                          # 启动开发服务器
    
    1. 修改代码中的关键部分,确保正常加载异步组件:
    import {createRouter, createWebHistory} from 'vue-router';
    
    // ...
    
    const routes = [
      // 静态路由
      {
        path: '/admin/404',
        // @ts-ignore
        component: () => import('../pages/error/Admin404.vue'),
        meta: {
          title: '404-找不到页面'
        }
      },
      {
        path: '/404',
        name: '404-找不到页面',
        // @ts-ignore
        component: () => import('../pages/error/404.vue'),
        meta: {
          title: '404页面'
        }
      }
    ];
    
    // 创建路由实例
    const router = createRouter({
      history: createWebHistory(),
      routes // 这里直接传入静态路由配置即可
    });
    
    // ...
    
    export default router;
    
    1. 运行项目,查看是否能正常显示页面。

    请注意,以上解决方案是基于提供的代码和描述的,如果问题仍然存在,请提供更详细的错误信息或代码片段以便更好地帮助你解决问题。我无法提供更具体的解决方案。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月27日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 C++ 菜单窗口独立出来,可以随意移动放大缩小。
  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?