vue3中使用router路由实现跳转传参

文章介绍了在Vue3中如何进行路由跳转,包括使用`useRouter`进行push操作,以及如何通过`params`和`query`传递参数。同时强调了在接收页面使用`useRoute`获取参数的方法,并提到了传参时需要注意的规则,如params和path的使用,以及在路由参数变化时如何响应。


大家好,今天和大家分享一下vue3中如何进行跳转并进行传参。

前言

vue3取消了vue2部分api,所以路由跳转和传值的方式会有所不同。
我们今天主要讲router.push(location, onComplete?, onAbort?)
vue3中新增API:useRouter和useRoute


一、路由跳转

1.首先在需要跳转的页面引入API—useRouter

import { useRouter } from 'vue-router'

2.在跳转页面定义router变量

//先在setup中定义
 const router = useRouter()

3.用router.push跳转页面

// 字符串
router.push('home')
// 对象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'user', params: { userId: '123' }})
// 带查询参数,变成 /register?userId=123
router.push({ path: 'register', query: { userId: '123' }})

4.如果有参数的话,在接收页面引入API–useRoute

import { useRoute } from 'vue-router'

5.在接收页面定义变量route,获取传过来的变量

//首先在setup中定义
const route = useRoute()
//query
let userId=route.query.userId;
//params
let userId=route.params.userId;

二、页面传参需要注意

1.如果提供了 path,params 会被忽略,但query 没有这种情况,此时需要提供路由的 name 或手写完整的带有参数的 path

const userId = '123'
router.push({ name: 'user', params: { userId }})
router.push({ path: `/user/${userId}` })
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }})

2.上述规则同样适用于 router-link 组件的 to 属性
3.如果目的地和当前路由相同,只有参数发生了改变 (比如从一个用户资料到另一个 /users/1 -> /users/2),你需要使用 beforeRouteUpdate 来响应这个变化 (比如抓取用户信息)

总结

以上就是本章的全部内容,希望本章能够帮助到您。

Vue 3使用 `vue-router` 进行页面跳转传参,可以通过 `router.push` 方法实现。`router.push` 支持多种传参方式,包括 `params` 和 `query`。 以下是一个完整的示例: ### 示例代码: ```javascript import { useRouter } from 'vue-router'; export default { setup() { const router = useRouter(); // 页面跳转并传递参数 const goToDetail = () => { router.push({ name: 'Detail', // 路由名称 params: { id: 123, name: 'Vue3' }, // 通过 params 传参 // query: { id: 123, name: 'Vue3' }, // 也可以通过 query 传参 }); }; return { goToDetail, }; }, }; ``` ### 路由配置: 确保在 `router/index.js` 中定义了对应的路由,并且使用了命名路由: ```javascript import { createRouter, createWebHistory } from 'vue-router'; import Detail from '../views/Detail.vue'; const routes = [ { path: '/detail', name: 'Detail', component: Detail, }, ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` ### 在目标页面获取参数: 在目标页面(如 `Detail.vue`)中,可以通过 `useRoute` 获取传递的参数: ```javascript import { useRoute } from 'vue-router'; export default { setup() { const route = useRoute(); // 获取 params 参数 console.log('Params:', route.params); // 获取 query 参数 console.log('Query:', route.query); return {}; }, }; ``` ### 说明: - `params`:适合传递一些非敏感数据,参数会出现在 `params` 中,但不会显示在 URL 上(需要路由配置中定义参数)。 - `query`:适合传递一些需要在 URL 中显示的数据,参数会显示在 URL 的查询字符串中,例如 `/detail?id=123&name=Vue3`。 - 如果你想使用 `params` 传参,必须在路由中定义参数,例如: ```javascript { path: '/detail/:id', name: 'Detail', component: Detail, } ``` 这样 `id` 就可以通过 `params.id` 传递并在 URL 中显示。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝卜头不吃萝卜头

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值