Vue3 Router跳转传参,最佳方法

最近遇到这个问题router跳转传参,真是要了老命了。

根据网上各位大神给出的方法,试了

import { useRouter } from 'vue-router'

const router = useRouter()

//1. 无法跳转
router.push(name:'',params:{})

//2. 可以跳转, 但需要在定义router同时定义占位符,比如path:'/user/:userid',否则跳转后收不到值
router.push(path:'',query:{})

1. router.push(name:'',params:{})

params好像已经被移除了,根本无法跳转

2. router.push(path:'', query:{})

可以跳转,比如 router.push(path:'/user', query:{id:'123'}) (注意:这里用name, 或者用path都可以,但是用path一定要记得带前面的 '/' )

浏览器会使用URL:http://localhost:5173/user?id=123 进行跳转。

获取参数:

router.currentRoute.value.query.id

3. 另外,还可以定义router的同时定义占位符,比如path:'/user/:id',这时参数会以/user/123的形式显示在URL中:

const routes = [
    {
        path:'/user/:id',
        name:User,
        component:User
    }
  ]

获取参数:

router.currentRoute.value.params.id

但是注意,如果这样定义router,则id就会被要求为必须的参数,这时不能再使用router.push(path:'/user', query:{id:'123'})

而必须使用

router.push(path:'/user/123')

而且路由跳转也必须带上参数:

<RouterLink to="/user/123">用户页面</RouterLink>

那么有没有解决方法呢?当然有,一个router不行,我们就定义两个router呗,一个带占位符,另一个不带占位符,不就解决了吗:

    {
      path: '/user/:id',
      name: User,
      component: User
    },
    {
      path: '/user2',
      name: User2,
      component: User
    }

4. 官网推荐的状态管理,但是仍有其他问题,最后会讲

如上图,新建一个store.js,用于保存你跳转时想要保存的值,比如:

import { reactive } from 'vue'

export const store = reactive({
  userinfo: {
    name: '',
    id: ''
  }
})

假设我们想要从A.vue跳转到B.vue,那么

A.vue:

import { store } from '../store/store.js'

//赋值
store.userinfo.id= 1001
//跳转
router.push('/B')

B.vue

import { store } from '../store/store.js'

let userId = store.userinfo.id //接受值

注意:router跳转不是传统意义的从一个html跳转到另外一个html,所以一旦刷新整个页面,store里面的值就没有了,需要重新赋值!比如这里跳转到B.vue后,如果刷新页面,store.userinfo.id就变成空字符串了。

综上所述,我推荐使用第二种方式来进行传参和接收参数,因为这种方式最灵活

router.push(path:'/user', query:{id:'123'})
router.currentRoute.value.query.id
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中,可以使用三种方式进行路由跳转传参:通过params、query和动态路由。 1. 通过params进行传参: 在跳转前,使用`router.push`方法,并在`params`对象中指定参数名和对应的值。例如: ```javascript function acty() { router.push({ name: 'tiaozhn', params: { id: "aaa" } }) } ``` 在目标组件中,可以通过`$route.params`来获取传递的参数。例如: ```javascript console.log($route.params.id); ``` 这样就可以获取到传递的参数值。 2. 通过query进行传参: 在跳转前,使用`router.push`方法,并在`query`对象中指定参数名和对应的值。例如: ```javascript function acty() { router.push({ path: '/tiaozhn', query: { som: "Aaa" } }) } ``` 在目标组件中,可以通过`$route.query`来获取传递的参数。例如: ```javascript console.log($route.query.som); ``` 这样就可以获取到传递的参数值。 3. 使用动态路由进行传参: 在跳转前,可以通过在路径中添加参数来进行传参。例如: ```javascript function acty() { var id = 1; proxy.$router.push('/tiaozhn/' + id) } ``` 在目标组件中,可以通过`$route.params`来获取传递的参数。例如: ```javascript console.log(proxy.$route.params.id); ``` 这样就可以获取到传递的参数值。 总结:在Vue3中,可以使用params、query和动态路由这三种方式进行路由跳转传参,根据需求选择合适的方式即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [VUE3 跳转传参的三种方式](https://blog.csdn.net/qq_54602808/article/details/119789250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值