一、嵌套路由的配置

1、children 属性

Vue Router 中的每一个路由对象身上都有一个 children 属性用来设置嵌套路由:

  1. const routes = [
  2. {
  3. path: '/home',
  4. name: 'Home',
  5. component: HomeView,
  6. children: [
  7. ]
  8. }
  9. ]

children 是一个数组,数组中用来设置所有的嵌套子路由对象。

2、配置子路由

例如我们再创建两个子组件:

  • /src/views/students/StudentsList.vue
  • /src/views/students/StudentsAdd.vue

然后在 Home 路由中配置这两个组件对应的子路由:

  1. const routes = [
  2. {
  3. path: '/home',
  4. name: 'Home',
  5. component: Home,
  6. children: [
  7. {
  8. path: 'studentsList',
  9. name: 'StudentsList',
  10. component: StudentsList
  11. },
  12. {
  13. path: 'studentsAdd',
  14. name: 'StudentsAdd',
  15. component: StudentsAdd
  16. }
  17. ]
  18. }
  19. ]

注意:嵌套子路由的路径前不能添加 /,所有以 / 开头的嵌套路径会被当作根路径。

二、嵌套路由出口

路由配置成功后,想要在页面上成功的显示对应组件,还需要继续设置路由出口 <router-view />
一开始为了在 App.vue 中显示 HomeView.vue,我们在 App.vue 中添加了一个 <router-view />。现在我们希望在 HomeView.vue 中可以显示 StudentsList.vueStudentsAdd.vue,因此还需要在 HomeView.vue 中添加一个 <router-view /> 来渲染 Home 中的子组件。

  1. <template>
  2. <div>
  3. <aside>侧边栏菜单</aside>
  4. <main>
  5. <header>首页</header>
  6. <section>
  7. <router-view></router-view>
  8. </section>
  9. </main>
  10. </div>
  11. </template>

三、嵌套路由的跳转

嵌套路由的跳转和普通路由的跳转没有区别,<router-link>this.$router 都可以使用:

  1. <router-link to="/home/studentsList"></router-link>
  1. this.$router.push("/home/studentsList");

但是需要注意的是,不管是什么路由,在任何组件中跳转时都需要写完整路径。

四、默认子路由

当我们给 /home 设置了子路由后,访问每一个子路由时,都会在页面对应位置显示对应的组件。
但是,如果我们只访问父级路由 /home 时,页面中子组件的位置就会是一片空白,所以,我们需要再给父级路由设置一个默认子路由:

  1. const routes = [
  2. {
  3. path: '/home',
  4. component: HomeView,
  5. children: [
  6. // 默认子路由
  7. {
  8. path: '',
  9. name: 'Home',
  10. component: ChartsView
  11. }
  12. // 其他子路由
  13. ]
  14. }
  15. ]

这样配置完成后,我们再访问 /home 时,就能看到 ChartsView.vue 这个页面了。
注意:

  1. 默认子路由的 path 为空字符串,用来匹配 /home 路径;
  2. 当设置了默认子路由时,父路由的 name 属性应该设置在默认子路由中;