Vue如何进行路由传参


Vue路由传参主要有两种方式

params参数

  • 浏览器地址栏中显示参数和不显示参数两种情况主要就是看路由配置。如果配置路由格式:/router/:id,则显示;如果配置的路由格式:/router,则不显示
  • 传递的方式:在path后面跟上对应的值

router-link形式传参

  1. to的字符串写法
//在路径中会显示参数,刷新页面参数不会丢失。
//配置路由
{
   path: '/user/:id',
   component: User,
},

//路由传参, 跳转并携带params参数,to的字符串写法
<router-link :to="`/user/${id}`" ></router-link>  

//获取路由参数
 $route.params.id

  1. to的对象写法
    路由携带params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置
在路径中会显示参数,刷新页面参数不会丢失。
//配置路由
{
   name:'user',
   path: '/user/:id',//使用占位符声明接收params参数
   component: User,
},

//路由传参, 跳转并携带params参数,to的对象写法
<router-link :to="{name:'user', params:{id:666}}">跳转</router-link>  

//获取路由参数
 $route.params.id

编程式路由导航传参

  1. 通过path匹配路由

如果使用params传参,且参数是以对象的形式,跳转路径只能使用name形式而不能用path。

//在路径中会显示参数,刷新页面参数不会丢失。
//配置路由
{
   path: '/user/:id',
   component: User,
},
//路由传参
this.$router.push({path: `/user/${id}`})
// 注意这种写法的params不生效!!
this.$router.push({ path: '/user', params: {id}})    // -> /user

//获取参数
$route.params.id

  1. 通过name匹配路由
//注意!!此时未在路由配置:id,不在路径中显示参数刷新页面参数会丢失
//路由传参
this.$router.push({name:'user',params:{id:666}})

//获取参数
$route.params.id

query参数

  • 配置路由格式:/router,也就是普通配置
  • 传递的方式:对象中使用query的key作为传递方式
  • 传递后形成的路径:/route?id=123

router-link形式传参

刷新页面参数不会丢失

  1. 通过路径path匹配路由
//路由传参

//to的字符串写法
<router-link :to="/user?id=666"><router-link>
//to的对象写法
<router-link :to="{path:'/user',query:{id:'666'}}"><router-link>

//获取参数
$route.query.id

  1. 通过name匹配路由
//路由传参
<router-link :to="{name: 'user', query: {id:'666'}}">按钮</router-link>

//获取参数
$route.query.id

编程式路由导航传参

刷新页面参数不会丢失

  1. 通过path匹配路由
//路由传参 字符串形式
this.$router.push('/user?id=666')
//或者对象形式
this.$router.push({path:'/user',query: {id:'666'}})

//获取参数
$route.query.id

  1. 通过name匹配路由
//路由传参
this.$router.push({name:'user',query: {id:'666'}})

//获取参数
$route.query.id

params和query的区别

用法:query要用path来引入,params要用name来引入,接收参数都是类似的,分别是 this.$route.query.idthis.$route.params.id

url地址显示:query更加类似于ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示

注意:query刷新不会丢失query里面的数据 ,params刷新会丢失 params里面的数据。


本文中部分类容参考:https://blog.youkuaiyun.com/m0_37843876/article/details/108196266

### Vue 3 路由传参的方法 在 Vue 3 中,路由传参是一个常见的需求,可以通过多种方式进行实现。以下是几种常用的方式及其具体示例: #### 1. 使用 `params` 参数 通过路径中的占位符传递参数,这种方式适用于需要将参数嵌入到 URL 的场景。 ##### 定义路由规则 ```javascript const routes = [ { path: '/user/:id', name: 'UserDetail', component: () => import('@/views/UserDetail.vue') } ]; ``` ##### 导航至目标路由并传递参数 ```javascript this.$router.push({ name: 'UserDetail', params: { id: 123 } }); // 结果URL: /user/123 ``` 需要注意的是,在使用 `params` 方式,如果直接指定字符串形式的路径,则无法携带参数[^1]。 --- #### 2. 使用 `query` 参数 通过查询字符串的形式附加参数,适合不需要暴露给用户的临性数据。 ##### 导航至目标路由并传递参数 ```javascript this.$router.push({ path: '/search', query: { keyword: 'Vue.js' } }); // 结果URL: /search?keyword=Vue.js ``` 在目标组件中读取 `query` 参数: ```javascript export default { mounted() { const keyword = this.$route.query.keyword; console.log(keyword); // 输出: Vue.js } }; ``` 此方法的优点在于不会改变路由结构,同便于调试和分享链接[^2]。 --- #### 3. 使用导航守卫与状态管理结合 对于更复杂的数据交互需求,可以借助 Vuex 或 Pinia 进行全局状态管理,并合导航守卫完成逻辑处理。 ##### 示例代码 设置导航前的操作: ```javascript router.beforeEach((to, from, next) => { if (to.name === 'OrderDetails') { store.dispatch('fetchOrderData', to.params.orderId); } next(); }); ``` 这样可以在进入特定页面之前提前加载所需数据[^4]。 --- #### 动态路由 当存在多个相似功能模块,可利用动态路由简化置过程。 ##### 置动态子路由 ```javascript { path: '/category/:type', component: CategoryView, children: [ { path: ':itemId', component: ItemDetailView }, ] } ``` 访问 `/category/books/978` 将会触发父级组件渲染以及对应的子组件实例化操作[^3]。 --- ### 总结 以上介绍了基于 Vue Router 实现的不同类型的路由传参方案,开发者应根据实际业务需求灵活选用合适的技术手段。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值