无参跳转
- 使用
<router-link to='地址'>
这是利用a标签的原理 - 使用JS的方式来实现跳转
方法:router .push(location, onComlete, onAbort?)
例如:this.$router.push('/')
每个实例上都带有一个router实力属性,我们通过该实例的方法push实现跳转
附: 因为用a标签的方法包裹起来要跳转的元素,会给元素加上a标签的样式,我们需要重新修改样式,有什么办法不用修改呢?
需要修改样式
<router-link to='/forgotpage'><span style='margin-left: 40px; color: #93CEFA'>Forgot password?</span></router-link>
我们可以改为:
<router-link to='/forgotpage'><span style='margin-left: 40px; color: #93CEFA'>Forgot password?</span></router-link>
命名路由,append 属性,查询参数,router-link渲染成<li>标签
<router-link tag="span" :to=''>
</router-link>
传参跳转
传参跳转的方式也有两种,还是router-link 和 JS 传递
JS控制跳转:
使用query:
this.$router.push({
path: '/home',
query: {
site: [],
bu: []
}
})
使用params:
this.$router.push({
name: 'Home', // 路由的名称
params: {
site: [],
bu: []
}
})
params:/router1/:id ,/router1/123,/router1/789 ,这里的id叫做params
query:/router1?id=123 ,/router1?id=456 ,这里的id叫做query。
两者都可以传递参数,区别是什么?
- query 传参配置的是path,而params传参配置的是name,在params中配置path无效
- query在路由配置不需要设置参数,而params必须设置
- query传递的参数会显示在地址栏中
- params传参刷新会无效,但是query会保存传递过来的值,刷新不变
路由配置:
query 的写法
{
path: '/home',
name: Home,
component: Home
}
params写法:
{
path: '/home/:site/:bu',
name: Home,
component: Home
}
如果路由上面不写参数,也是可以传过去的,但不会在url上面显示出你的参数,并且当你跳到别的页面或者刷新页面的时候参数会丢失,那依赖这个参数的http请求或者其他操作就会失败。
获取路由参数
在接收的跳转的页面
created () {
let self = this
self.getParams()
},
watch : {
'$route': 'getParams'
},
methods: {
getParams () {
let site = this.$route.query.site
let bu = this.$route.query.bu
// 如果是params 传参,那就是this.$route.params.site
上面就可以获取到传递的参数了
}
}
注意:获取路由上面的参数,用的是$route,后面没有r
params是路由的一部分,必须要有。query是拼接在url后面的参数,没有也没关系。
params一旦设置在路由,params就是路由的一部分,如果这个路由有params传参,但是在跳转的时候没有传这个参数,会导致跳转失败或者页面会没有内容。
params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失,query并不会出现这种情况,这一点的在上面说过了