vue-router路由动态传参携带id进入详情页的三种模式

本文详细介绍了Vue.js中编程式导航的三种方法,包括通过路径参数、命名路由参数和查询参数进行动态传参。在实际应用中,根据需求选择合适的方式,既可以避免参数暴露在URL中,也可以灵活地传递和获取详情页的ID。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中,通过一个列表进入详情页,携带参数id渲染不同的详情页,动态传参使用编程式跳转
vue传参方法一
在router路由配置中

{
      path: '/article/:id',
      name: 'Article',
      component: Article,
 }

在列表页中点击事件

handleClick(id){
   this.$router.push(`/article/${id}`) ;
 }

在详情页中使用params获取

mounted() {
   console.log(this.$route.params.id);
}

特点:方法一中需要在path中添加/:id来对应 $router.push 中path携带的参数。会把详情id暴露在网址中
vue传参方法二
在router路由配置中

{
      path: '/article',
      name: 'Article',
      component: Article,
 }

在列表页中点击事件

handleClick(id){
   this.$router.push({
     name: 'Article',
     params: {
         id: id
     }
   })
 }

在详情页中使用params获取

mounted() {
   console.log(this.$route.params.id);
}

特点;这里不能使用:/id来传递参数了,因为父组件中,已经使用params来携带参数了。所以不会暴露在网址中,同时也不会变化网址,router.afterEach也没有办法调用

vue传参方法三
在router路由配置中

{
      path: '/article',
      name: 'Article',
      component: Article,
 }

在列表页中点击事件

handleClick(id){
   this.$router.push({
     path: '/article',
     query: {
        id: id
     }
   })
 }

在详情页中使用query获取

mounted() {
   console.log(this.$route.query.id);
}

特点:这种情况下 query传递的参数会在url后面拼接上 ?id=?,同样会暴漏详情id
开始提到了编程式跳转,这里还要在说一种编程式不携参的跳转方式$router.go();
这个就随意提一下,就是类似于history.go()的方法,括号里面填个1就是前进一级页面,-1就后退一级页面

### Vue 3 中使用 `router.params` 传参而不显示在 URL 中 为了确保参数不显示在 URL 中并能成功传递给目标组件,推荐的做法是在定义路由时使用具名路由,并通过 `this.$router.push()` 方法来导航。具体来说: 当使用路径(path)方式进行导航时,确实不能直接结合 `params` 参数一起使用[^2]。因此,应该采用具名路由的方式来进行页面间的跳转。 #### 定义具名路由 首先,在路由配置文件中为每个需要接收参数的路由指定名称属性。例如: ```typescript import { createRouter, createWebHistory } from 'vue-router'; import Home from '../views/Home.vue'; import Detail from '../views/Detail.vue'; const routes = [ { path: '/', name: 'Home', component: Home, }, { path: '/detail/:id?', // 可选参数 name: 'Detail', // 路由命名 component: Detail, props: true // 启用props自动绑定查询字符串或路由参数作为prop传递给组件 } ]; export default createRouter({ history: createWebHistory(), routes, }); ``` 上述代码片段展示了如何设置名为 "Detail" 的路由及其对应的可选参数 `id`[^3]。 #### 导航至带参数的目标页 接着,在源组件内利用 `$router.push()` 函数执行带有 `params` 对象的导航操作。这会触发新的视图加载而无需改变浏览器地址栏中的可见部分: ```javascript // 假设当前位于首页 (Home),点击某个链接后希望前往详情页(Detail) 并携带 id=12345 的参数 this.$router.push({ name: 'Detail', // 使用路由的名字而不是路径 params: { id: '12345' },// 设置要发送给下一个页面的数据 }) ``` 需要注意的是,如果尝试仅依靠 `path` 属性进行相同的操作,则会导致参数丢失的问题发生。 另外,自 2022年8月22日之后版本更新以来,Vue Router 已经调整了对于 `params` 类型参数处理逻辑;这意味着如果不按照官方文档指导正确地应用这些特性的话,可能会遇到预期之外的行为,比如无法正常接收到所期望的参数值等情况出现[^1]。 最后提醒一点,虽然可以通过这种方式隐藏 URL 上面的实际参数内容,但在某些情况下这样做可能会影响用户体验以及SEO效果,请谨慎评估实际应用场景后再做决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值