vue-route4参数的传递
传参主要有两种方式,params和query,用params传参,F5强制刷新参数会被清空,用query,由于参数适用路径传参的所以F5强制刷新也不会被清空。(传参强烈建议适用string)
配置路径rutes
import { createRouter, createWebHashHistory } from 'vue-router';
import TestVueRouter from '../components/TestVueRouter/TestVueRouter;
import TestVueRouterTo from '../components/TestVueRouterTo/TestVueRouterTo;
const router = createRouter({
history: createWebHashHistory(),
routes: [
{
path: '/testVueRouter',
name: 'TestVueRouter',
component: TestVueRouter
},
{
path: '/testVueRouterTo',
// 一定要写name,params必须用name来识别路径
name: 'TestVueRouterTo',
component: TestVueRouterTo
}
]
});
export default router;
params传递参数
传递参数页
<!-- test-vue-router页面 -->
<template>
<div>
<a @click="routerTo()">query传参</a>
</div>
</template>
<script>
export default {
methods: {
routerTo() {
this.$router.push({
name: `TestVueRouterTo`,
params: {
page: '1', code: '8989'
}
})
}
}
}
</script>
接收传递过来的参数,用$route,少个r,注意啦
http://localhost:8080/#testVueRouterTo F5强制刷新 数据会丢失
<!-- test-vue-router-to页面 -->
<template>
<div>
</div>
</template>
<script>
export default{
data() {
return {
page: '',
code: ''
}
},
created() {
this.getRouterData()
},
methods: {
getRouterData() {
this.page = this.$route.params.page
this.code = this.$route.params.code
console.log('page', this.page)
console.log('code', this.code)
}
}
}
</script>
query传递参数
传递参数页
<!-- test-vue-router页面 -->
<template>
<div>
<a @click="routerTo()">query传参</a>
</div>
</template>
<script>
export default {
methods: {
routerTo() {
this.$router.push({
name: `TestVueRouterTo`,
// 只是把query改了,其他都没变
query: {
page: '1', code: '8989'
}
})
}
}
}
</script>
接受参数
<!-- test-vue-router-to页面 -->
<template>
<div>
</div>
</template>
<script>
export default{
data() {
return {
page: '',
code: ''
}
},
created() {
this.getRouterData()
},
methods: {
getRouterData() {
// 只是改了query,其他都不变
this.page = this.$route.query.page
this.code = this.$route.query.code
console.log('page', this.page)
console.log('code', this.code)
}
}
}
</script>
使用query,那么在浏览器地址栏的链接就是http://localhost:8080/#testVueRouterTo?page=1&code=8989,使用F5强制刷新依然可以获取数据。
query与params传参机制不一样,如果要隐藏参数用params,如果强制刷新不被清除用query
获取路由参数和检测参数值是否存在
组件检测参数值是否存在,不存在则返回上一个组件
created() {
// 如果传递的参数是空那么返回主页
if (!this.$route.query.page) {
this.$router.push('/test-vue-router');
return;
}
},
同样的获取当前页面路由的参数:
this.$route.query.xxx
或者
this.$route.param.xxx
在控制台打印this.$route结果如下(示例):
{
fullPath: "/detail?target=http://www.qdxin.cn/xin/2018/144624.html",
path: "/detail",
query: {target: 'http://www.qdxin.cn/xin/2018/144624.html'},
hash: "",
name: "detail",
…
}