路由实例

   // 创建路由实例
   var router = new VueRouter({
       // 构造配置
       routes:[
         // 路由规则(或称为:路由记录)
         {...},{...}
      ]
   });

将路由实例挂载到 Vue 根实例后,以下属性会被注入到每个组件中:

[1] $router    路由实例

# 实例属性

  • router.app                             挂载了路由实例的 Vue 根实例
  • router.mode                         路由的使用模式
  • router.currentRoute           当前激活的路由信息对象,等同于 $route

# 实例方法

  • router.beforeEach(guard)         导航守卫
  • router.forward()                          动态的导航到一个新 url

[2] $route    当前激活的路由信息对象                    // 只读,里面的属性是不可变的,不过可以通过 watch 监测


$route,用于表示当前激活的路由的状态信息,其中包含了当前 URL 解析得到的信息,以及 URL 匹配到的路由规则

  • $route.path  对应当前路由的路径,总是解析为绝对路径,如 "/foo/bar"
  • $route.params  一个 key/value 对象,包含了 动态片段和全匹配片段,如果没有路由参数,就是一个空对象
  • $route.query  一个 key/value 对象,表示 URL 查询参数。如,路径 /foo?user=1,则有 $route.query.user = 1
  • $route.hash  当前路由的 hash 值 (带 #) ,如果没有 hash 值,则为空字符串
  • $route.fullPath  完成解析后的 URL,包含查询参数和 hash 的完整路径
  • $route.matched  一个数组,包含当前路由的所有嵌套路径片段的路由记录( 路由规则 )
const router = new VueRouter({
  routes: [
    // 下面的对象就是 route record
    { path: '/foo', component: Foo,
      children: [
        // 这也是个 route record
        { path: 'bar', component: Bar }
      ]
    }
  ]
})

# 当 URL 为 /foo/bar,$route.matched 将会是一个包含从上到下的所有对象(副本)
  • $route.name 当前路由的名称,如果有的话

$route,是不可变的,每次成功导航后,都会产生一个新的对象,它可以出现在多个地方:

1. 组件内的 this.$route 和 $route watcher 回调( 监测变化处理 )

2. rouer.match(location) 的返回值

3. 导航钩子的参数

router.beforeEach((to, from, next) => {
  // to 和 from 都是 路由信息对象
})

4. scrollBehavior 方法的参数

const router = new VueRouter({
  scrollBehavior (to, from, savedPosition) {
    // to 和 from 都是 路由信息对象
  }
})