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

vue.js - Vue Router router.push 方法在嵌套路由中如何正确指向子路由?

单嘉泽
2024-06-26

关于vue-router的嵌套路由和编程式导航的问题

在向子路由的导航中,我发现router.push方法会将本级路由修改而不是导向子路由
router.push('mainPageView')
在当前路由为'/MainPage'的情况下,会将路由信息更改为'/mainPageView',而不是期望的'/MainPage/mianPageView',导致
image.png

我试着使用完全地址

router.push(`${route.fullPath}/mainPageView`)

发现能够正常使用。但在多级的嵌套路由中,拼凑完全地址十分麻烦,并且在网上查的资料也都是不加/的子路由push应当是拼接在本级路由后的,希望得到不使用完全地址便能够正常路由的方法。

共有3个答案

单于季
2024-06-26

看你描述需求,我想应该是需要建立一个路由表。

理想状态

1、main.js文件需要有路由引入

import router from "./router";new Vue({      router,      store,      render: (h) => h(App),}).$mount("#app");

2、 main.js同层级应该有一个router文件夹,里面在新建一个index.js

import Vue from "vue";import VueRouter from "vue-router";Vue.use(VueRouter);const routes = [ {    path: "/",    name: "Home",     children: [        {          path: "/xxx",          name: "xxx",          component: () => import("@/views/xxx/index.vue"),          meta: {            title: "页面名字xxx",          },        },         {          path: "/mainPageView",          name: "mainPageView",          component: () => import("@/MainPage/mainPageView.vue"),          meta: {            title: "页面名字mainPageView",          },        },]const router = new VueRouter({  routes,});export default router;

效果

最后就是你的业务页面直接想带参数跳转就这样整

this.router.push({    path:'/mainPageView'    param:'你的字符串参数'})

疑惑

其实我也没搞懂,如果你是自己手搓的系统或移动端,肯定需要一套路由表。如果是用成熟框架,this.router.push没毛病。你再找找,肯定有路由表的。不然太坑爹。

杜俊风
2024-06-26

尝试使用 router.push({ name: 'mainPageView'}) 这样的方式?使用路由name去跳转?

编程式导航 | Vue Router

司空宗清
2024-06-26

在 Vue Router 中,如果你想要通过编程式导航(如 router.push)正确地导航到嵌套的子路由,你需要确保你的路由配置是正确的,并且你提供了正确的路径。

首先,你的路由配置应该像这样,使用嵌套的路由对象:

const routes = [  {    path: '/MainPage',    name: 'MainPage',    component: MainPage,    children: [      {        path: 'mainPageView',        component: MainPageView      },      // 其他子路由...    ]  },  // 其他路由...];

在这个配置中,如果你想要导航到 MainPage 下的 mainPageView 子路由,你应该使用包含父路由名称和子路由路径的字符串,或者使用路由的位置对象。

以下是几种方法来实现这一点:

  1. 使用命名的路由(如果给子路由也定义了名称):
this.$router.push({ name: 'MainPage.mainPageView' });

注意,这里的 MainPage.mainPageView 假设你在子路由中也定义了一个名称属性,且格式为 <父路由名称>.<子路由名称>

  1. 使用路径字符串(确保包含父路由的路径):
this.$router.push('/MainPage/mainPageView');
  1. 使用路由参数对象(包含 path 属性):
this.$router.push({ path: '/MainPage/mainPageView' });
  1. 使用当前路由的 paramsquery(如果你需要基于当前路由动态地构建路径):
this.$router.push({ path: `${this.$route.path}/mainPageView` });// 注意:这种方法可能不适用于所有情况,特别是当父路由有参数或查询字符串时

但请注意,上述第4种方法中直接拼接 this.$route.path 可能会产生问题,特别是当父路由包含动态部分(如 /user/:id)或查询字符串时。

如果你发现 router.push('mainPageView') 试图替换整个路径而不是添加到当前路径,那么很可能是因为你的路由配置中没有正确设置嵌套路由,或者你没有提供正确的路径/名称。

总之,确保你的路由配置正确,并且你使用了正确的路径或名称来导航到嵌套的子路由。如果你不想使用完整的路径字符串,那么使用命名的路由通常是一个更好的选择。

 类似资料:
  • 我正在尝试写一个简单的路线系列,下面是我想要发生的事情: 我几乎什么都试过了,却不知道该怎么办。这方面的文档很难理解。 谁能给我指点一下吗?

  • 我有一个名为Dashboard的父组件,它被呈现为路由,如下所示: 我试着嘲笑每个人在嵌套路由上的解决方案,但我似乎无法解决我的问题。

  • 本文向大家介绍vue2路由方式--嵌套路由实现方法分析,包括了vue2路由方式--嵌套路由实现方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了vue2嵌套路由实现方法。分享给大家供大家参考,具体如下: 前面讲过了vue2路由基本用法,一般应用中的路由方式不会像上述例子那么简单,往往会出现二级导航这种情况。这时就需要使用嵌套路由这种写法。 上文中的 importFile,jsp 在上

  • 如果我将路由折叠起来,这样看起来就像: 工作很好。我嵌套的原因是因为我将在“dashboard”下有多个子项,并且希望它们都在URL中以为前缀。

  • 问题内容: 有没有办法在React Router v4中嵌套路由? 这有效: 这不是: 客户组成部分: 问题答案: 到目前为止,我发现的最佳模式。 我可以继续将其嵌套在组件中,并且一切都很好,包括hmr(如果使用webpack,请不要忘记设置为)

  • 1. 前言 本小节我们介绍如何嵌套使用 VueRouter。嵌套路由在日常的开发中非常常见,如何定义和使用嵌套路由是本节的重点。同学们在学完本节课程之后需要自己多尝试配置路由。 2. 配置嵌套路由 实际项目中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件,例如: /article/vue /a