Skip to content

嵌套路由

嵌套路由

简介

嵌套路由是一种在单页面应用中,通过路由规则进行层级嵌套,来展示复杂的组件结构关系的技术。

它的作用是为了实现拆分页面组件,并在父子路由之间建立关联,从而更好地组织复杂页面的结构,这样可以提示代码的可维护性和复用性,并且允许用户在页面间进行层级导航,也提升了用户的体验。

嵌套路由的优点

  • 清晰的组件关系:使组件之间的关系更加清晰明了,有助于开发者理解和维护代码。
  • 灵活性:可根据项目需求动态地配置和调整嵌套路由,从而满足不同页面结构的需求。
  • 提升页面的加载效率:嵌套路由只加载当前活跃的路由组件,可提升页面加载效率。
  • 支持复杂的页面布局:允许构建包含多个层级的页面布局,从而实现更灵活的用户界面设计。

基础用法

在上一节的例子中,为了能看到路由切换的效果,在 App.vue 文件中使用了 <router-view> 标签。

当涉及到嵌套路由时,会需要在子组件中再次使用 router-view 标签。

此外,还需要在路由配置中为子路由创建对应的规则,并在父路由的配置中添加一个 children 属性来指定这些子路由的配置信息。这样即可实现嵌套路由的效果。

下面是一个简单示例:

HogChild.vue

<template>
    <div>
        <h2>HogChild</h2>
    </div>
</template>

Hogwarts.vue

<template>
    <div>
        <h2>Hogwarts</h2>
        <router-link to="/hogwarts/hogchild">进入到子路由界面</router-link>
        <router-view></router-view>
    </div>
</template>

index.js

import Ceshiren from '../components/Ceshiren.vue'
import Hogwarts from '../components/Hogwarts.vue'
import HogChild from '../components/HogChild.vue'
const routes=[
    {
        path:'/ceshiren',
        component:Ceshiren
    },
    {
        path:'/hogwarts',
        component:Hogwarts,
        // 配置子路由
        children:[
            {
                path:"hogchild",
                component:HogChild
            }
        ]
    }
]

如此即可实现子路由的定义,由 Hogwarts 页面跳转到 Hogchild 页面的效果如下图所示,该页面的地址为:http://127.0.0.1:5173/#/hogwarts/hogchild

嵌套的命名路由

命名路由是指在路由配置中为特定的路由规则分配一个名称,以便通过该名称来打开相应的路由。

通常会为子路由进行命名,以便更方便地进行导航。

此外,如果希望在导航时不显示嵌套路由,还可以为父路由分配一个名称,从而实现按名称导航到相应的路由。

通过使用命名路由,可以提升路由配置的可读性和维护性,使得代码更加清晰明了。

修改上述示例中的子路由配置,添加 name 属性,代码如下所示:

index.js

import {createRouter,createWebHashHistory} from 'vue-router'
import Ceshiren from '../components/Ceshiren.vue'
import Hogwarts from '../components/Hogwarts.vue'
import HogChild from '../components/HogChild.vue'
const routes=[
    {
        path:'/ceshiren',
        component:Ceshiren
    },
    {
        path:'/hogwarts',
        component:Hogwarts,
        children:[
            {
                path: "hogchild",
                component: HogChild,
                // 命名路由
                name: 'hogchildname'
            }
        ]
    }
]

Hogwarts.vue

<template>
    <div>
        <h2>Hogwarts</h2>
        <!-- 使用name属性导航到具体的路由 -->
        <router-link :to="{name: 'hogchildname'}">进入到子路由界面</router-link>
        <router-view></router-view>
    </div>
</template>

总结

本节内容主要涵盖了嵌套路由的概念、基本用法以及命名路由的写法。掌握了本节的内容,将能够根据实际需要设计具有层次和逻辑的路由跳转结构,从而更有效地管理和组织应用程序。