当前位置: > > > Vue.js - 路由 vue-router 的使用详解10(嵌套路由、二级路由)

Vue.js - 路由 vue-router 的使用详解10(嵌套路由、二级路由)

   在一个项目中可以嵌套使用多个 <router-view> 组件,这种情况就需要用到嵌套路由。下面以一个使用二级路由的样例进行演示,更多层级的路由实现原理是一样的。

1,样例代码

(1)App.vue
  • 页面中有一个 <router-view> 组件用来渲染显示一级路由的页面组件。
  • 同时 <router-view> 组件上方有四个链接(后两个为嵌套路由,其中 hangge 为参数),点击后进行页面的切换。
<template>
  <div id="app">
    <p>
      <router-link to="/" tag="li">/</router-link>
      <router-link to="/user/hangge" tag="li">/user/hangge</router-link>
      <router-link to="/user/hangge/profile" tag="li">/user/hangge/profile</router-link>
      <router-link to="/user/hangge/posts" tag="li">/user/hangge/posts</router-link>
    </p>
    <router-view></router-view>
  </div>
</template>

<script>
  export default {
    name: 'App',
  }
</script>

(2)router/index.js
  • 路由配置文件中通过 children 属性配置子路由。
  • 为方便演示这里我的页面组件直接通过 template 定义,没有创建单独的 vue 文件。
  • 特别注意 User 这个页面组件,它的内部又包含了一个 <router-view> 组件,用于渲染显示二级路由的页面组件。
import Vue from 'vue'
import Router from 'vue-router'

//Vue全局使用Router
Vue.use(Router)

//首页模块
const Index = {
  template: `
    <div class="user">
      <h2>欢迎访问 hangge.com</h2>
    </div>
  `
}

//用户模块
const User = {
  template: `
    <div class="user">
      <h2>你好:{{ $route.params.userName }}</h2>
      <router-view></router-view>
    </div>
  `
}

//用户模块下的子模块
const UserHome = { template: '<div>Home</div>' }
const UserProfile = { template: '<div>Profile</div>' }
const UserPosts = { template: '<div>Posts</div>' }

export default new Router({
  routes: [
    {
      path: '/',
      name: 'index',
      component: Index
    },
    {
      path: '/user/:userName',
      name: 'user',
      component: User,
      children: [
        { path: '', component: UserHome },
        { path: 'profile', component: UserProfile },
        { path: 'posts', component: UserPosts }
      ]
    }
  ]
})

2,运行效果 

(1)点击前面两个链接可以进行一级路由的跳转。
      

(2)而点击后面两个链接可以进行二级路由的跳转。
  
评论0