vue 动态路由

  • 什么是动态路由?带参数的路由就是动态路由
const User = {
  template: '
User
' } const router = new VueRouter({ routes: [ // 动态路径参数 以冒号开头 { path: '/user/:id', component: User } ] })
  • 实际使用



//再这个时候user后面的值会变成路由定义的id的值的参数 /user/foo /user/bar

const User = { template: `
User {{ $route.params.id }}
` } const router = new VueRouter({ routes: [ { path: '/user/:id', component: User } ] }) const app = new Vue({ router }).$mount('#app')

路由中使用多段路径作为参数

模式 匹配参数 $router.params
/user/:username /user/evan { username: 'evan' }
/user/:username/post/:post_id /user/evan/post/123 { username: 'evan', post_id: 123 }

!!! 路由组件复用

  • 提醒一下,当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。

  • 复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch (监测变化) $route 对象:

  • 知识点 watch 监听路由 和路由导航守卫 beforeRouteUpdata

const User = {
  template: '...',
  watch: {
    '$route' (to, from) {
      // 对路由变化作出响应...
    }
  }
}
const User = {
  template: '...',
  beforeRouteUpdate (to, from, next) {
    // react to route changes...
    // don't forget to call next()
  }
}

嵌套路由

//主路由出口
const User = { template: '
User {{ $route.params.id }}
' } const router = new VueRouter({ routes: [ { path: '/user/:id', component: User } ] }) //这里的 是最顶层的出口,渲染最高级路由匹配到的组件。 //同样地,一个被渲染组件同样可以包含自己的嵌套 。例 //如,在 User 组件的模板添加一个 : const User = { template: `

User {{ $route.params.id }}

` } //要在嵌套的出口中渲染组件,需要在 VueRouter 的参数中使用 children 配置: const router = new VueRouter({ routes: [ { path: '/user/:id', component: User, children: [ { // 当 /user/:id/profile 匹配成功, // UserProfile 会被渲染在 User 的 中 path: 'profile', component: UserProfile }, { // 当 /user/:id/posts 匹配成功 // UserPosts 会被渲染在 User 的 中 path: 'posts', component: UserPosts } ] } ] })

需要注意的是以 / 开头的嵌套路径会被当作根路径。这让你充分的使用嵌套组件而无需设置嵌套路径

  • 如果直接访问子路径的上一级 。子路径是不会被显示的因为子路径没有被匹配
  • 如果需要子路径显示内容可以匹配一个空路径如下
const router = new VueRouter({
  routes: [
    {
      path: '/user/:id', component: User,
      children: [
        // 当 /user/:id 匹配成功,
        // UserHome 会被渲染在 User 的  中
        { path: '', component: UserHome },

        // ...其他子路由
      ]
    }
  ]
})

你可能感兴趣的:(vue 动态路由)