这篇整理一下vue-router的两个部分:编程式导航及路由传值。
编程式导航
编程式导航其实是跟声明式导航相对的:
1 | // 声明式路由导航 |
两种方式都可以实现路由导航,使用<router-link>相当于调用了router.push。不过编程式导航,还有router.replace(),router.go(),router.back()及router.forward()方法可以调用。
router.push()&router.replace()
router.push()和router.replace()传参都是一样,分别是必须传值的location和可选的onComplete,onAbort回调。
location传入的参数可以是字符串,直接指向路由地址,也可以是描述地址的对象,还可以是路由对象及带查询参数的对象:
1 | /* 官方文档的代码*/ |
下面是实际项目中对编程式导航的实现及router.push()的运用:
1 | /* 项目中的实现 */ |
router.push()实际上是在history栈添加一个新的记录,也就是用户点击浏览器后退时,是可以返回到上一个路由的。
官方文档中提醒了一句:如果提供了path,params会被忽略。如果要传入无法通过路径传入的值,或者传入值较多,建议使用parmas。
可选的onComplete,onAbort回调主要用在导航完成之后及导航终止的时候进行调用。目前我还没有看到网上有什么人有讲到这部分,所以了解就好,以后再深入。
router.replace()跟router.push()有一个很大的区别,在于它不是在history栈添加一个新的记录,而是替换当前的记录,也就是无法返回上一个路由记录。其他使用方面都是一样的。
router.go(),router.back()及router.forward()
router.go()的参数是一个整数,表示在浏览器记录中向前或向后几步。如果是向前一步,就是router.go(1),即router.back();如果是向后一步,就是router.go(-1),即router.forward()。
路由传值
其实前面的篇幅中,多少已经涉及到路由传值了。路由传值主要是在<router-link>的to属性中跟router.push()中使用,传值也分params跟query。
1 | // 使用动态路由时,在to属性中使用params对象传值 |
上面有提到,如果提供了path,params会被忽略,所以一般使用params时,就需要传入name指明路由名,如果使用query时,就可以直接传入路由路径。
传值在组件内可以通过this.$route.params及this.$route.query获得。
使用path,params时有一点需要注意,使用path传值,刷新页面参数会丢失;使用params查询参数,刷新页面参数就不会丢失。
vue-router的这两篇内容算入门内容,简单做整理,加深理解。vue-router的其他内容也会在深入学习使用之后再整理出来。