【vue-router】05 - 嵌套路由

89 阅读1分钟

1. 定义

/user/johnny/profile                     /user/johnny/posts
+------------------+                  +-----------------+
| User             |                  | User            |
| +--------------+ |                  | +-------------+ |
| | Profile      | |  +------------>  | | Posts       | |
| |              | |                  | |             | |
| +--------------+ |                  | +-------------+ |
+------------------+                  +-----------------+

父组件里面想根据需要放置一些不同的子组件,那么可以使用嵌套路由

值得注意的是:<router-view> 是为 子路由组件 占位的,和 <router-link> 不一定要写在同一个组件中

2. 编码

配置路由信息表,表达嵌套关系,Nav.vue 里面嵌入 Login.vue or Register.vue

/src/router/index.ts

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'

const routes: Array<RouteRecordRaw> = [
    {
        path: "/",
        component: () => import('../pages/Nav.vue'),
        children: [
            {
                // 默认情况下,根组件中显示 Login 子组件
                path: "",
                name: "Login",
                component: () => import('../pages/Login.vue')
            },
            {
                path: "register",
                name: "Register",
                component: () => import('../pages/Register.vue')
            }
        ]
    },

]

const router = createRouter({
    history: createWebHistory(),
    routes: routes
})



export default router

父组件 Nav.vue

<template>
    <h1>导航</h1>
    <router-link to="/">登录</router-link>
    <router-link to="/register" style="margin-left: 10px;">注册</router-link>
    <hr>
    <!-- 子路由的占位符 -->
    <router-view></router-view>
</template>

子组件 Login.vue and Register.vue

// Login.vue
<template>
<h3>登录</h3>
</template>

// Register.vue
<template>
<h3>注册</h3>
</template>

效果如下

登录页 ↓

image.png

注册页 ↓

image.png

假如登录和注册不在根路径上,应该怎么写呢?

如下,父组件的路径改为 /user

image.png

那么父组件的跳转就应该 ↓

image.png

访问时,要加上路径前缀 /user

image.png image.png