vue3 中动态添加路由出现的问题 [Vue Router warn]: No match found for location with path “xxx“

这篇具有很好参考价值的文章主要介绍了vue3 中动态添加路由出现的问题 [Vue Router warn]: No match found for location with path “xxx“。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

最近想尝试 vue3 + elementplus + axios + pinia 封装一个通用的后台模板,写到 vue-router 添加动态路由时,有一个不影响代码运行但是又有提示的报错,因此进行记录,方便大家进行解决

控制台提示

vue3 中动态添加路由出现的问题 [Vue Router warn]: No match found for location with path “xxx“,vue,vue.js,前端
图片圈出的路由是动态加载的路由

解决方案

404等报错页面不再需要放在所有路由后面,可在一开始的时候就定义好报错跳转的页面路由。

页面之所有一开始报错找不到路由,是因为动态加载的路由在 beforeEach 的时候 to.matched 为空数组,即此时 next 跳转则会出现空白页面,之后使用 addRoute() 时动态添加的路由已经被加载上去,此时 next({ …to, replace: true }) 就跳转成功,所以需要在一开始先定义好 404 页面,防止路由报上面图片的错误

export const Layout = () => import("@/layout/index.vue");
export const constantRoutes = [
  {
    path: "/",
    redirect: "/dashboard",
    hidden: true,
  },
  {
    path: "/login",
    name: "Login",
    component: () => import("@/views/login/index.vue"),
    hidden: true,
  },
  // 404页面
  {
    path: "/:pathMatch(.*)*",
    component: () => import("@/views/error/index.vue"),
    hidden: true,
  },
  {
    path: "/dashboard",
    component: Layout,
    redirect: "/dashboard/index",
    hidden: true,
    children: [
      {
        path: "index",
        name: "Dashboard",
        component: () => import("@/views/dashboard/index.vue"),
      },
    ],
  },
];

export default router;
import router, { resetRouter } from './router';
import { getToken } from '@/utils/sessionStorage';
import { usePermissionStore } from '@/store/permission';

// 判断是否初次或者刷新页面 0表示初次
let isRequest = 0;

router.beforeEach(async (to, _from, next) => {
  async function init () {
    // 调用方法获取路由
    const accessRoutes: any = await usePermissionStore().getGenerateRoutes();
    accessRoutes.forEach((route: any) => {
      router.addRoute(route);
    });
    isRequest = 1;
  }

  // 判断条件根据项目更改
  if (getToken()) {
    if (to.path === '/login') {
      next({ path: '/' });
    }
    if (isRequest) {
      next();
    } else {
      await init();
      next({ ...to, replace: true });
    }
  } else {
    sessionStorage.clear();
    isRequest = 0;
    if (to.path === '/login') {
      next();
    } else {
      resetRouter();
      next({ path: '/login' });
    }
  }
});

注意

vue2 中 通常使用 path: " * " 捕获所有路由,vue3 中不支持 vue2 的写法,需要用正则来捕获

1. /:pathMatch(.*)*  
2. /:pathMatch(.*)

上面两个的区别在于 如果省略最后一个'*'在解析或推送时将对params中的'/'字符进行编码

拓展

export const Layout = () => import("@/layout/index.vue");

// vue3 中,当有使用到动态加载路由的情况,使用这种方式引入会出现点击每个大导航栏,Layout 重新加载的情况,因此需要改成上面的写法
import Layout from "@/layout/index.vue";

vue3 中动态添加路由出现的问题 [Vue Router warn]: No match found for location with path “xxx“,vue,vue.js,前端
点击用户管理中的任意路由之后,再点击个人信息中的任意路由,如果使用上面第二种写法,就会出现 Layout 页面组件重新加载!!!文章来源地址https://www.toymoban.com/news/detail-700261.html

到了这里,关于vue3 中动态添加路由出现的问题 [Vue Router warn]: No match found for location with path “xxx“的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 关于动态路由刷新出现空白页最优解

    原因:刷新页面的时候动态路由会刷新掉,然后动态路由会重新加载, 而匹配路由会在加载路由之前 ,所以会导致空白页 解决办法:递归再调用beforEach,或者直接跳回首页 在你加载路由的地方 递归调用:next({ …to, replace: true });(慎用,如果你的后台管理table是带标签会有

    2024年02月15日
    浏览(42)
  • 已解决vue-router4路由报“[Vue Router warn]: No match found for location with path“

    vue-router4动态加载的模式下,当我们在当前页面刷新浏览器时,会出现一个警告 [Vue Router warn]: No match found for location with path 百度了很久基本上没解决方案,虽然只是警告但还是看着不爽,这个原因是刷新页面时请求路由为空,因为追加路由是在addRoute里做的,请求路由比addR

    2024年02月11日
    浏览(32)
  • vue3使用vue-router嵌套路由(多级路由)

    Vue3 嵌套路由的使用和 Vue2 相差不大,主要的区别是 Vue3 的路由实例化使用了 createApp() 方法,所以实例化路由时需要传入根组件。另外,Vue3 的路由对象除了包含 Vue2 中的导航守卫、导航钩子和解析守卫等功能外,还新增了 meta prop 和 route prop。 在使用嵌套路由时,建议将路由

    2024年02月03日
    浏览(39)
  • Vue3 中路由Vue Router 的使用

    在编写vue里的SPA(Single Page Application单页面应用)时,我们始终绕不开路由的使用,vue-router4.0版里有一些重要更新,在这里分享给大家。 vue-router是vue.js官方给出的路由解决方案,能够轻松的管理SPA项目中组件的切换 Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让

    2024年02月02日
    浏览(27)
  • Vue3配置路由(vue-router)

    紧接上篇文章,vue3的配置与vue2是有所差别的,本文就讲述了如何配置,如果本文对你有所帮助请三连支持博主。 下面案例可供参考 使用npm命令进行安装 : npm install vue-router@4 完成后我们打开项目根目录下的 package.json 文件: 如下即为成功 这里创建 view目录,然后在view目录

    2023年04月12日
    浏览(45)
  • Vue3的vue-router路由详解

    这篇文章是接着【三分钟快速搭建Vue3+webpack项目】的内容做的开发,有基础的可以跳过 【三分钟快速搭建Vue3+webpack项目】,直接看以下的内容。 Vue3的vue-router路由详解: 首先安装路由依赖模块: 所需代码文件如下图: 图1   所需要的主要文件: index.html、index.js、App.vue in

    2024年02月01日
    浏览(49)
  • Vue3/ Vue3内 Vue-router Vue3路由 完整配置流程

    (1). yarn add vue-router (2) 创建 router/index.js 文件 (3) improt 引入 createRouter improt { createRouter  }  from \\\'vue-router (4) 调用 createRouter 并定义变量名  cosnt router = createRouter()  (5) export default 导出 router  export default router  (6) createRouter() 内添加对象 并定义 history    history: createMemoryHistory()

    2023年04月08日
    浏览(67)
  • vue3+ts:安装路由(router)

           1.安装vue-router         vue3需要安装4.0以上版本         vue2最好安装4.0以下版本         安装命令:         安装完成后,在package.json中查看vue-router是否安装成功   src目录下新建一个router文件夹,在router文件夹里新建一个index.ts文件,代码如下: main.ts中代码

    2024年02月06日
    浏览(35)
  • Vue Router 路由动态缓存组件

    Vue Router 允许你缓存路由组件,这样在用户导航回之前的页面时,组件的状态会被保留而不是重新渲染。这可以通过使用 keep-alive 组件来实现。 keep-alive 是一个内置抽象组件,它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。 它的主要作用是缓存不活动的组件实例,

    2024年04月16日
    浏览(26)
  • vue-router addRoute将子路由添加到指定路由下

    router.addRoute可以向vue路由中动态的添加路由信息 但路由存在多层级关系 例如 我们最开始的路由是这样的 例如 我们想在 name为layout的这个路由下 加一条子路由 就可以写 addRoute的第一个参数接受一个字符串 就是告诉它要插入到那个路由 输入要切入路由的name

    2024年02月15日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包