Vue-Router API参考

本文详细介绍了Vue Router的API使用,包括<router-link>和<router-view>组件的特性,路由配置选项,以及路由对象和组件注入的属性。探讨了如何利用Vue Router进行页面导航,组件复用和路由守卫。
摘要由CSDN通过智能技术生成

Vue Router API 参考

1. < router-link> Props

tag
类型: string

默认值: "a"

有时候想要 <router-link> 渲染成某种标签,例如 <li>。 
于是我们使用 tag prop 类指定何种标签,同样它还是会监听点击,触发导航。
<router-link to="/foo" tag="li">foo</router-link>
<!-- 渲染结果 -->
<li> foo </li>

2. < router-view >

<router-view> 组件是一个 functional 组件,渲染路径匹配到的视图组件。<router-view> 
渲染的组件还可以内嵌自己的 <router-view>,根据嵌套路径,渲染嵌套组件。

3. < router-view > Props

name
类型: string

默认值: "default"

如果 <router-view>设置了名称,则会渲染对应的路由配置中 components 下的相应组件。查看 命名视图 中的例子。

4. Router 构建选项

routes
类型: Array<RouteConfig>

RouteConfig 的类型定义:
declare type RouterConfig = {
  path: string;
  component?:Component;   // 引用组件的名字
  name?: string; //命名路由
  components: {[name:string]:Component};   // 命名视图组件
  redirect: string | location | Function;  // 重定向
  props: string | boolean | Function;  	   // 传参
  alias: string | Array<string>; // 别名
  children: Array<RouterConfig>;  // 嵌套路由
  beforeEnter?: (to: Route, from: Route, next: Function) => void;
  meta?: any;
  
  // 2.6.0+
  caseSensitive?: boolean; // 匹配规则是否大小写敏感?(默认值:false)
  pathToRegexpOptions?: Object; // 编译正则的选项
}
mode
类型: string

默认值: "hash" (浏览器环境) | "abstract" (Node.js 环境)

可选值: "hash" | "history" | "abstract"

配置路由模式:

hash: 使用 URL hash 值来作路由。支持所有浏览器,包括不支持 HTML5 History Api 的浏览器。

history: 依赖 HTML5 History API 和服务器配置。查看 HTML5 History 模式。

abstract: 支持所有 JavaScript 运行环境,如 Node.js 服务器端。如果发现没有浏览器的 API,路由会自动强制进入这个模式。
base
类型: string

默认值: "/"

应用的基路径。例如,如果整个单页应用服务在 /app/ 下,然后 base 就应该设为 "/app/"
linkActiveClass
类型: string

默认值: "router-link-active"

全局配置 <router-link> 的默认“激活 class 类名”。参考 router-link。
linkExactActiveClass
类型: string

默认值: "router-link-exact-active"

全局配置 <router-link> 精确激活的默认的 class。可同时翻阅 router-link。

5. Router 实例属性

router
类型: Vue instance

配置了 router 的 Vue 根实例
router.mode
类型: string

路由使用的模式。

router.currentRoute

类型: Route

当前路由对应的路由信息对象。

6. Router 实例方法

router.beforeEach
router.beforeResolve
router.afterEach
函数签名:

router.beforeEach((to, from, next) => {
  /* must call `next` */
})

router.beforeResolve((to, from, next) => {
  /* must call `next` */
})

router.afterEach((to, from) => {})
增加全局的导航守卫。参考导航守卫。

在 2.5.0+ 这三个方法都返回一个移除已注册的守卫/钩子的函数。

#router.push

#router.replace

#router.go

#router.back

#router.forward

7.路由对象

一个路由对象表示当前激活的路由的状态信息,包含了当前URL解析得到的信息,还有URL 匹配到的路由记录( route records)。
路由对象是不可变的,每次成功的导航后都会产生一个新的对象。

路由对象出现在多个地方:

在组件内,即 this.$route
在 $route 观察者回调内
router.match(location) 的返回值
导航守卫的参数:
router.beforeEach((to, from, next) => {
  // `to` 和 `from` 都是路由对象
})

路由对象属性

$route.path

类型: string

字符串,对应当前路由的路径,总是解析为绝对路径,如 "/foo/bar"
$route.params

类型: Object

一个 key/value 对象,包含了动态片段和全匹配片段,如果没有路由参数,就是一个空对象。
$route.query

类型: Object

一个 key/value 对象,表示 URL 查询参数。例如,对于路径 /foo?user=1,则有 $route.query.user == 1,如果没有查询参数,则是个空对象。
$route.hash

类型: string

当前路由的 hash  (带 #) ,如果没有 hash 值,则为空字符串。
$route.fullPath

类型: string

完成解析后的 URL,包含查询参数和 hash 的完整路径。
$route.matched

类型: Array<RouteRecord>
一个数组,包含当前路由的所有嵌套路径片段的路由记录 。路由记录就是 routes 配置数组中的对象副本 (还有在 children 数组)const router = new VueRouter({
  routes: [
    // 下面的对象就是路由记录
    { path: '/foo', component: Foo,
      children: [
        // 这也是个路由记录
        { path: 'bar', component: Bar }
      ]
    }
  ]
})URL/foo/bar,$route.matched 将会是一个包含从上到下的所有对象 (副本)
$route.name

当前路由的名称,如果有的话。(查看命名路由)
$route.redirectedFrom

如果存在重定向,即为重定向来源的路由的名字。(参阅重定向和别名)

8. 组件注入

组件注入的属性

通过在 Vue 根实例的 router 配置传入 router 实例, 通过这些属性成员会被注入到每个子组件。

增加的组件配置选项

beforeRouteEnter
beforeRouteUpdate
beforeRouteLeave
const Foo = {
  template: `...`,
  beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }
}

完整的导航解析流程

1. 导航被触发。
2. 在失活的组件里调用离开守卫。
3. 调用全局的 beforeEach 守卫。
4. 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)5. 在路由配置里调用 beforeEnter。
6. 解析异步路由组件。
7. 在被激活的组件里调用 beforeRouteEnter。
8. 调用全局的 beforeResolve 守卫 (2.5+)9. 导航被确认。
10. 调用全局的 afterEach 钩子。
11. 触发 DOM 更新。
12. 用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值