上一篇写道路由跳转
这里写一写路由跳转的时候是如何进行路由传参的
首页start的传参问题
开始页引进ref
先定义几个参数,然后通过路由的形式把这几个参数传递到另一个路由
let name = ref("jack");
let num = ref(10);
let obj = ref({
msg: "start",
});
这里可以看见我们最常用的push的方法
push函数里面可以直接传入跳转的路径
router.push("/about");
也可以传入对象参数
router.push({
path: "/about",
});
query模式传参
跳转路由 这几个参数以query的方式传递过去
从start.vue 跳转到home.vue
在浏览器地址栏 可以看见传递过来的参数
Home.vue里面接收
首先引入useRoute 这个函数
import { useRouter, useRoute } from "vue-router";
打印一下这个当前的路由对象
//当前的路由对象
let route = useRoute();
console.log(route);
可以看到页面里面已经有了接收到的参数了
定义的数字类型通过jQuery传递过来都会变成字符串的类型
使用typeof检测一下
//当前的路由对象
let route = useRoute();
//query传递过来的参数都是字符串类型
console.log("打印route", typeof route.query.num);
所以这里传递过来的参数需要使用 JSON.parse手动转一下
JSON.parse()方法将JSON格式字符串转换为js对象(属性名没有双引号)。
params传参
router.push({
path: "/home",
params: {
name: name.value,
num: num.value,
obj: JSON.stringify(obj),
},
});
//当前的路由对象
let route = useRoute();
//query传递过来的参数都是字符串类型
console.log("打印route", route.params);
此时打印的为空对象、
这里需要注意一下
push里面还可以传入name name是路由名字
query传参path和name都可以
params传参只能用name
params传入的参数不会在地址栏中显示,刷新之后就没有了
Start.vue
<template>
<div>
<button @click="start">开始任务</button>
</div>
</template>
<script>
import { defineComponent, ref } from "vue";
import { useRouter } from "vue-router";
export default defineComponent({
name: "Start",
setup() {
//router是全局路由对象
let router = useRouter();
console.log(router);
let name = ref("jack");
let num = ref(10);
let obj = ref({
msg: "start",
});
let start = () => {
//push 如果传递的是对象的形式 就可以传递参数
router.push({
// path: "/home",
//push里面还可以传入name name是路由名字
// query传参path和name都可以
// params传参只能用name
name: "Home",
params: {
name: name.value,
num: num.value,
obj: JSON.stringify(obj.value),
},
});
};
return {
start,
};
},
});
</script>
<style scoped></style>
Home.vue
<template>
<div>
<nav-header></nav-header>
<nav-main></nav-main>
<nav-footer></nav-footer>
<button @click="goto">跳转路由</button>
</div>
</template>
<script>
// import NavHeader from "@/components/navHeader/NavHeader.vue";
// import NavMain from "@/components/navMain/NavMain.vue";
// import NavFooter from "@/components/navFooter/NavFooter.vue";
import { defineComponent, ref, computed } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
export default defineComponent({
name: "Home",
props: {},
components: {
// NavHeader,
// NavMain,
// NavFooter,
},
setup() {
//router是全局路由对象
let router = useRouter();
//当前的路由对象
let route = useRoute();
//query传递过来的参数都是字符串类型
console.log("打印route", route.params);
let goto = () => {
//跳转路由
//push函数里面可以直接传入跳转的路径
//router.push("/about");
//back回退到上一页
//forward:去到下一页
//go(整数) 整数代表前进 负数代表后退
router.push({
path: "/about",
});
};
return {
goto,
};
},
});
</script>
<style></style>