嵌套路由讲解

举报
SHQ5785 发表于 2024/04/19 15:10:02 2024/04/19
【摘要】 一、前言路由嵌套,即在当前路由中注册子路由,形成父子路由,并在父路由中显示子路由对应的组件。子路由内也可以注册它的子路由,一直下去就可以形成一个庞大的“路由家族”。简单来说,就是在一个路由的页面下,继续使用路由加载新的组件;可以将嵌套路由理解为父子路由,常见的多导航界面通常就是由多层嵌套的组件组合而成。嵌套路由还有一个优点,就是让新的页面内容展示在父组件的占位符(即router-view标...

一、前言

路由嵌套,即在当前路由中注册子路由,形成父子路由,并在父路由中显示子路由对应的组件。子路由内也可以注册它的子路由,一直下去就可以形成一个庞大的“路由家族”。

简单来说,就是在一个路由的页面下,继续使用路由加载新的组件;可以将嵌套路由理解为父子路由,常见的多导航界面通常就是由多层嵌套的组件组合而成。

嵌套路由还有一个优点,就是让新的页面内容展示在父组件的占位符(即router-view标签)中,这样有利于页面结构的搭建,结构清晰。

那么,如何注册子路由呢?

Vue路由定义中需要用到一个children属性,其值为数组,数组中的每一项对应一个子路由。

二、码上谈兵

示例代码如下:

<template id="tmpl">
  <div>
    <h1>这是 Account 组件</h1>

    <router-link to="/account/login">登录</router-link>
    <router-link to="/account/register">注册</router-link>

    <router-view></router-view>
  </div>
</template>

路由配置文件如下:

routes: [
  {
    path: '/account',
    component: account,
    // 使用 children 属性,实现子路由,同时,子路由的 path 前面,不要带 / ,否则永远以根路径开始请求,这样不方便去理解URL地址
    children: [
      { path: 'login', component: login },
      { path: 'register', component: register }
    ]
  }
  // { path: '/account/login', component: login },
  // { path: '/account/register', component: register }
]

还可以优化以上处理逻辑,在home路由对应的组件加载到页面时,若需要默认加载一个子路由时,可以做一个重定向,在home路由中redirect:"重定向的子路由网址"。这个时候加载home页面时默认会加一个子路由。

代码:默认显示home2

{
    path:"/home",
    name:"home",
    component:()=>import('../views/home/index.vue'),
    redirect:"/home/home2",//当网址为/home时重定向到/home/home2
    children:[
        {
            path:"home1",
            name:"home1",
            component:()=>import('../views/home/home1/index.vue')
        },
        {
            path:"home2",
            name:"home2",
            component:()=>import('../views/home/home2/index.vue')
        },
        {
            path:"home3",
            name:"home3",
            component:()=>import('../views/home/home3/index.vue')
        },
    ]
}

页面:当我们网址为localhost:8080/home时自动转跳到localhost:8080/home/home2,这时子路由home2对应的组件加载到home中。

在这里插入图片描述

三、拓展阅读

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。