编程式路由导航是指不通过<router-link>创建<a>标签来定义导航链接,而是借助路由组件实例中的$router实例,通过编写代码来实现路由导航。
使用编程式路由导航,可以让路由的跳转方式变得更加灵活。
两种导航方式
$router也有与<router-link>相同两种导航方式,分别是push和replace。这两种方式分别调用两个不同的API,不过这两个API的使用方式是一致的。并且他们传入的参数与<router-link>中to props的值一样,可以传入两种类型的参数。
-
$router.push():this.$router.push('/user/zhangsan')router.push({ name: 'user', params: { name: 'zhangsan' } }) -
$router.replace():this.$router.replace('/user/zhangsan')router.replace({ name: 'user', params: { name: 'zhangsan', } })
一般情况下,push和replace的区别是,replace模式不会向history添加新记录。
$router.push()可以在配置对象中加入一个replace:true,起到与$router.replace()相同的效果:
router.push({
path: '/user/zhangsan',
replace: true,
})
// 相当于
router.replace({
path: '/user/zhangsan',
})
移动历史记录
$router还封装了一些用于操作当前应用历史浏览记录的API:
-
$router.forward():向前移动一条记录。 -
router.back():回退上一条记录。 -
$router.go(n):携带一个整数类型的参数,用于在历史堆栈中前进后退$n$步(类似于window.history.go(n))。- 当$n$为正整数时,在历史堆栈中前进$n$步。
- 当$n$为负整数时,在历史堆栈中后退$|n|$步。
- 如果移动的步数超过历史堆栈的长度($|n|$过大),那么移动静默失败。
例如:
$router.go(1):向前移动一条记录。与$router.forward()相同。$router.go(-1):回退上一条记录。与$router.back()相同。$router.go(3):向前移动3条记录。
评论