【Web】Vue 3 中 router 参数传递的 4 种方式

Vue 3 + Vue Router 4 中可行的参数传递方式(含刷新保留特性)


🌈 Vue 3 中 router 参数传递的 4 种方式


① query 参数方式(推荐)

语法:

router.push({
  path: '/detail',
  query: { id: 1, name: 'apple' }
})

或:

router.push({
  name: 'Detail',
  query: { id: 1, name: 'apple' }
})

目标页接收:

const route = useRoute()
console.log(route.query.id)   // "1"
console.log(route.query.name) // "apple"

刷新后:✅ 保留
URL 示例: /detail?id=1&name=apple

优点:

  • 刷新不丢失
  • 可分享链接
  • 简洁、通用

缺点:

  • 参数暴露在 URL 中(不适合敏感数据)

② params 参数方式(依赖命名路由)

路由配置:

{
  path: '/detail/:id',
  name: 'Detail',
  component: Detail
}

跳转方式:

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

目标页接收:

const route = useRoute()
console.log(route.params.id) // "1"

刷新后:❌ 丢失(因为不在 URL 中)
除非写入 path 中。


③ 直接使用 path 拼接参数

这是一种「path 直传」方式,本质上属于 params 的具体写法。

路由配置:

{
  path: '/detail/:id',
  name: 'Detail',
  component: Detail
}

跳转:

router.push(`/detail/${id}`)

目标页接收:

const route = useRoute()
console.log(route.params.id)

刷新后:✅ 保留
因为 id 直接写进了路径,属于 URL 的一部分。

优点:

  • 参数体现在 URL 中(但不像 query 那样显式键值)
  • 刷新不丢失
  • 简洁

缺点:

  • 只能传简单类型参数(数字、字符串)
  • 不能直接传多个复杂对象

例如:

/detail/1

想传多个字段只能:

/detail/1/2/3

或:

/detail/1?type=abc

这时 query 与 path 混用更实用。


④ localStorage / sessionStorage 持久化传递

适合需要跨页面传递对象、列表敏感数据

跳转前保存:

localStorage.setItem('detailData', JSON.stringify({ id: 1, name: 'apple' }))
router.push('/detail')

目标页读取:

const info = JSON.parse(localStorage.getItem('detailData'))

刷新后:✅ 保留

优点:

  • 可保存复杂对象
  • 不暴露在 URL

缺点:

  • 需手动清除,否则数据残留
  • 不适合需要分享链接的场景

📊 总结对比表

方式是否刷新保留是否暴露在URL是否可传对象是否需命名路由常见场景
query✅ 是✅ 是❌ 否❌ 否普通参数传递
params❌ 否❌ 否❌ 否✅ 是临时参数传递
path✅ 是✅ 是❌ 否❌ 否简单 ID 传递
localStorage / sessionStorage✅ 是❌ 否✅ 是❌ 否复杂/敏感数据

🔧 实战建议

需求推荐方式
普通参数传递且希望刷新保留query
只传一个简单 ID,希望 URL 美观path
临时跳转,参数不需要刷新保留params
传递复杂对象、不想暴露 URLlocalStorage / sessionStorage
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ganshenml

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

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

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

打赏作者

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

抵扣说明:

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

余额充值