上一篇文章介绍了vue中路由的基础用法,当业务开始复杂时,路由也开始复杂起来,路由嵌套可以更好的表示组件之间的关系。

比如我们学生组件下有 男生跟女生组件。老师组件中有语文老师和数学老师组件。

1.使用方法

在上一篇的基础上,我们新建两个组件,分别命名为StudentA 和StudentB组件

<template>
  <div>
    <span>我是teacherA组件!!!!!</span>
  </div>
</template>
<script>
  export default{
    name:'StudentA',
  }
</script>

然后,修改路由器的路由规则,增加子路由:

import VueRouter from 'vue-router'
//引入组件
import Student from '../components/Student.vue'
import Teacher from '../components/Teacher.vue'
import StudentA from '../components/StudentA.vue'
import StudentB from '../components/StudentB.vue'
//创建一个路由器
const router = new VueRouter({
    routes: [
        {
            path: '/stu',
            component: Student,
            children: [
                {
                    path: 'stuA',
                    component: StudentA
                },
                {
                    path: 'stuB',
                    component: StudentB
                },
            ]
        },
        {
            path: '/tea',
            component: Teacher
        }
    ]
})

//对外暴露路由器
export default router

可以看出,类似于套娃的结构,里面写children然后再写子路由即可。

然后我们修改student.vue中的代码,让页面呈现出二级路由的效果,参考代码如下:

<template>
  <div>
    <span>我是student组件</span>
    <br>
    <ul>
        <li>
          <router-link to='/stu/stuA'>点击查看studentA</router-link>
        </li>
        <li>
          <router-link to='/stu/stuB'>点击查看studentB</router-link>
        </li>
    </ul>  
    <div>
      <router-view></router-view>
    </div>
  </div>
</template>
<script>
  export default{
    name:'Student',
  }
</script>

这个地方需要注意,暂时需要写成 /stu/stuA 这种形式,后期再做优化,呈现在页面上的效果如下:

2.使用名命路由的方式

因为二级路由的名初可能比较长,所以我们可以给路由起个名字,这就是名命路由。

比如下面这样:

    routes: [
        {
            path: '/stu',
            component: Student,
            children: [
                {
                    name:"abcd",
                    path: 'stuA',
                    component: StudentA
                },
                {
                    path: 'stuB',
                    component: StudentB
                },
            ]
        },
        {
            path: '/tea',
            component: Teacher
        }
    ]

原来二级路由 /stu/stuA,现在可以通过给它起的别名abcd来访问了

那么router-link可以参考下面的写法

  <router-link :to="{
            name:'abcd',
   }
">点击查看studentB</router-link>