当前位置: 首页 > 知识库问答 >
问题:

vue.js - 如何正确设置Vue.js路由以渲染不同的404页面?

曹旭东
2024-04-02

我设置3个一级路由,然后想在这3个一级路由的子路由下渲染各自不同的404页面。404路径匹配不对

const routes = [  {    path: "/",    name: "home",    component: () => import("@/components/HelloWorld.vue"),  },  {    path: "/b",    name: "b",    component: () => import("@/views/b/index.vue"),    children: [      {        path: "b1",        name: "b1",        component: () => import("@/views/b/b1.vue"),      },      {        path: "/:pathMatch(.*)*",        name: "BNotFound",        component: () => import("@/views/b/BNotFound.vue"),      },    ],  },  {    path: "/c",    name: "c",    component: () => import("@/views/c/index.vue"),    children: [      {        path: "c1",        name: "c1",        component: () => import("@/views/c/c1.vue"),      },      {        path: "/:pathMatch(.*)*",        name: "CNotFound",        component: () => import("@/views/c/CNotFound.vue"),      },    ],  },  {    path: "/:pathMatch(.*)*",    name: "NotFound",    component: () => import("@/views/NotFound.vue"),  },]

为什么我访问"/c/c2"路径时,匹配到的是B的404页面即 BNotFound,而不是 CNotFound。如何改正?

AI 回答的不对,我用的是最新的 vue-router 版本 4.3.0。(我已经知道解决方法了,就在之前方式加点东西搞定各种情况下的不同404页面 )
报错:vue-router.js?v=36532544:975 Uncaught Error: Catch all routes ("*") must now be defined using a param with a custom regexp

共有1个答案

万俟招
2024-04-02

在你的代码中,"/c/c2" 这个路径确实可能被 B 的 404 页面匹配,因为在路由规则中,":pathMatch(.)" 是一个通配符,会匹配所有未明确指定的路径。由于这个规则在 B 的子路由中定义,所以当访问 "/c/c2" 时,它首先尝试匹配 B 的子路由,然后匹配到了这个通配符规则。

要解决这个问题,你需要确保每个一级路由的子路由都有自己的 404 页面,并且这些 404 页面的路径规则应该放在子路由的最后,以确保只有当其他所有子路由都无法匹配时,才会匹配到 404 页面。同时,这些 404 页面的路径规则应该避免使用通配符,以防止它们意外地匹配到其他路由。

以下是修改后的路由配置:

const routes = [  {    path: "/",    name: "home",    component: () => import("@/components/HelloWorld.vue"),  },  {    path: "/b",    name: "b",    component: () => import("@/views/b/index.vue"),    children: [      {        path: "b1",        name: "b1",        component: () => import("@/views/b/b1.vue"),      },      {        path: "b2", // 假设这是另一个有效的子路由        name: "b2",        component: () => import("@/views/b/b2.vue"),      },      // 其他有效的子路由...      {        path: "*", // 匹配所有其他未明确指定的子路由        name: "BNotFound",        component: () => import("@/views/b/BNotFound.vue"),      },    ],  },  {    path: "/c",    name: "c",    component: () => import("@/views/c/index.vue"),    children: [      {        path: "c1",        name: "c1",        component: () => import("@/views/c/c1.vue"),      },      {        path: "c2", // 假设这是另一个有效的子路由        name: "c2",        component: () => import("@/views/c/c2.vue"),      },      // 其他有效的子路由...      {        path: "*", // 匹配所有其他未明确指定的子路由        name: "CNotFound",        component: () => import("@/views/c/CNotFound.vue"),      },    ],  },  {    path: "*", // 匹配所有其他未明确指定的路径    name: "NotFound",    component: () => import("@/views/NotFound.vue"),  },]

在这个修改后的配置中,每个一级路由的子路由都有自己的 404 页面,这些页面的路径规则为 "path: '*'",意味着它们会匹配所有其他未明确指定的子路由。这样,当你访问 "/c/c2" 时,由于它无法匹配到 C 的任何有效子路由,所以会被 C 的 404 页面匹配到,而不是 B 的 404 页面。

 类似资料:
  • 本文向大家介绍vue.js,ajax渲染页面的实例,包括了vue.js,ajax渲染页面的实例的使用技巧和注意事项,需要的朋友参考一下 关于上次说的用vue.js,zepto,node.js,webpack等技术重构CNode。这是一个比较入门的项目,一般你学完vue就可以上手了,CNode网站有公开的API所以你可以获取这个网站的所有数据接口,然后渲染到页面上,用CSS等加工一下就可以了。起初,

  • 主要内容:安装,简单实例,HTML 代码,JavaScript 代码,<router-link> 相关属性本章节我们将为大家介绍 Vue.js 路由。 Vue.js 路由允许我们通过不同的 URL 访问不同的内容。 通过 Vue.js 可以实现多视图的单页Web应用(single page web application,SPA)。 Vue.js 路由需要载入 vue-router 库 中文文档地址:vue-router文档。 安装 1、直接下载 / CDN NPM 推荐使用淘宝镜像: 简单实例

  • 页面渲染设置 页面渲染功能开启后能自动加载出网页中的ajax内容 服务器中需要安装谷歌浏览器,支持linux、win系统 centos7安装chrome的命令: wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm yum localinstall google-chrome-stable_

  • 本文向大家介绍Vue.js列表渲染绑定jQuery插件的正确姿势,包括了Vue.js列表渲染绑定jQuery插件的正确姿势的使用技巧和注意事项,需要的朋友参考一下 使用v-for绑定列表时,有时候需要绑定如select2之类的jQuery插件。 需要在Vue根据数组内容生成dom元素之后,去找到该dom元素,然后 $().xxx绑定jQuery插件。 之前使用Vue.nextTick方法,在一次d

  • 对于使用Box2DDebugRenderer进行渲染Box2D调试,我有一些问题。我有两个正交摄像机,一个用于渲染世界(名为Cam),另一个用于HUD(healthBar,Armor,…)(名为hudCam)。 我试图渲染: > b2dr。渲染(世界,凸轮组合)- 我找不到一种方法来渲染Box2D完全像凸轮,看到所有机构的边缘。 如果有人理解我的问题,请帮助我! 谢谢。

  • 本文向大家介绍ajax请求+vue.js渲染+页面加载的示例,包括了ajax请求+vue.js渲染+页面加载的示例的使用技巧和注意事项,需要的朋友参考一下 1.导入js 2.body主体 3.js代码块 以上这篇ajax请求+vue.js渲染+页面加载的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。