this.$route.params.id不显示 vue之动态路由获取url bug

今天写vue 动态路由在不同的用户界面后面会跟上不同的id 而在写的组件上想显示添加上去的id发现用this.$route.params.userid

一直在界面上不显示


$route只能获取活跃状态下路由的数据)
route是一个跳转的路由对象,每一个路由都会有一个route对象,是一个局部的对象


原因是在router文件夹下的index.js文件配置路由时
直接用export导出routes
没有先声明routes中的内容
正确的配置路由代码[index.js]:

//配置路由相关信息

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import xiaozhan from '../components/xz'
import user from '../components/user'


//1.通过Vue.use(插件),安装插件
Vue.use(Router)


//2.创建Router对象
const routes = [
  // 应用const声明 否则this.$router.params.userid无法获取数据
  {
    //一个映射关系配一个对象
    path: '/', //url后面为/ 显示的是默认页面(第一次就打开该页面 无需用户点击后再显示) 用HelloWorld组件
    //redirect:重定向
    redirect:'/hello'
  },
  {
    //一个映射关系配一个对象
    path: '/hello', //url后面为/ 显示的是默认页面(第一次就打开该页面 无需用户点击后再显示) 用HelloWorld组件
    name: 'HelloWorld',
    component: HelloWorld
  },
  {
    //一个映射关系配一个对象
    path: '/xz',
    name: 'xiaozhan',
    component: xiaozhan
  },
  {
    //一个映射关系配一个对象
    path: '/user/:userid', //若想动态的在url后添加id必须再加/:变量 
    name: 'user',
    component: user
  }
]
export default new Router({
  //配置路由和组件之间的应用关系
  routes,
  mode:'history', //生成的Url不带#
  linkActiveClass:'active1' //修改所有点击的类名 不用在每个上面都加
})

原先:

//配置路由相关信息

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import xiaozhan from '../components/xz'

//1.通过Vue.use(插件),安装插件
Vue.use(Router)

//2.创建Router对象
export default new Router({
  //配置路由和组件之间的应用关系
  routes: [
    {
      //一个映射关系配一个对象
      path: '', //url后面为/ 显示的是默认页面(第一次就打开该页面 无需用户点击后再显示) 用HelloWorld组件
      //redirect:重定向
      redirect:'/hello'
    },
    {
      //一个映射关系配一个对象
      path: '/hello', //url后面为/ 显示的是默认页面(第一次就打开该页面 无需用户点击后再显示) 用HelloWorld组件
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      //一个映射关系配一个对象
      path: '/xz',
      name: 'xiaozhan',
      component: xiaozhan
    }
  ],
  mode:'history', //生成的Url不带#
  activeClass:"active"
})

害 这件事情告诉我们一时的不在意导致了后面代码的错误 而且还有可能发现不了 要认真啊!!!

后附一张成功显示的图片:
在这里插入图片描述

这个显示的用户名是App.vue下的用户按钮中拼接的userid(记得使用v-bind拼)
yeah!

<think>嗯,用户遇到了在Vue3和Vue Router中使用params传参的问题,参数传过去。我需要先回忆一下Vue Router在Vue3中的变化。记得Vue Router 4(对应Vue3)里,params的使用方式和之前的版本有所同。以前可能可以直接用params,但现在可能需要更严格的配置。 首先,用户可能是在定义路由的时候没有指定动态参数。比如,如果路由路径没有像`:id`这样的占位符,params可能会被正确接收。这时候应该检查路由配置,确保目标路由的path包含相应的参数。 然后,用户可能在调用router.push时使用了path属性而是name属性。因为在Vue Router 4中,如果使用path,params会被忽略,必须使用name来指定路由的名称,这样params才能正确传递。这是常见的错误点,需要提醒用户检查是否用了name。 接下来,参数的处理方面,用户可能在目标页面没有正确接收参数。Vue3中,应该使用useRoute钩子来获取参数,比如route.params.id。如果用户还在用this.$route,可能在组合式API中适用,需要改用新的方式。 另外,参数的可选性问题。如果路由参数是可选的,可能需要用正则表达式或默认值来处理,避免路径匹配的情况。例如,path: '/user/:id?'可以让id成为可选参数。 还有,用户可能传递了未声明的参数。如果params中的参数没有在路由配置中定义,这些参数会被忽略,所以必须确保所有传递的参数都在路由的path里有对应的占位符。 最后,检查Vue Router的版本。如果用户使用的是旧版本的Vue Router 4,可能存在一些bug,建议升级到最新版本,确保问题是由已知的bug引起的。 总结一下,常见的问题点包括路由配置、使用path而非name、参数接收方式、可选参数处理和版本问题。需要一步步引导用户检查这些方面,给出示例代码,帮助用户定位和解决问题。</think>在 Vue3 + Vue Router 项目中,使用 params 传参时需要注意以下关键点: ### 一、常见问题原因 1. **路由配置缺失**:未在路由定义中声明参数占位符 2. **错误的路由跳转方式**:混合使用 `path` 和 `params` 3. **参数接收方式错误**:未正确使用组合式 API 获取参数 ### 二、解决方案步骤 #### 1. 正确配置路由 ```javascript // router.js const routes = [ { path: '/detail/:id', // 必须声明参数占位符 name: 'Detail', component: () => import('./views/Detail.vue') } ]; ``` #### 2. 正确传递参数 ```javascript // 正确写法:使用命名路由 + params router.push({ name: 'Detail', // 必须使用路由名称 params: { id: 123 // 参数名需与路由配置匹配 } }); // 错误写法(params会被忽略): router.push({ path: '/detail', params: { id: 123 } // 当使用path时,params会被忽略 }); ``` #### 3. 正确接收参数(组合式API) ```vue <script setup> import { useRoute } from 'vue-router'; const route = useRoute(); // 通过route.params获取参数 console.log(route.params.id); // 输出 123 </script> ``` ### 三、注意事项 1. **参数持久化**:页面刷新后 params 参数会丢失,重要数据建议: - 改用 query 参数(需处理字符串类型转换) - 使用 Vuex/Pinia 状态管理 - 配合 sessionStorage/localStorage 2. **可选参数处理**: ```javascript // 路由配置添加可选标识 path: '/user/:id?' ``` 3. **类型转换**:获取到的 params 参数始终是字符串类型,需要显式转换数字类型: ```javascript const id = Number(route.params.id); ``` ### 四、调试技巧 1. 在跳转前检查路由对象: ```javascript console.log(router.resolve({ name: 'Detail', params: { id: 123 } })); ``` 2. 查看最终生成的 URL: ```javascript // 输出解析后的路径 console.log(router.currentRoute.value.fullPath); ``` ### 五、版本兼容性检查 确保使用 Vue Router 4.1.6+ 版本(解决早期版本的 params 相关 bug): ```bash npm install vue-router@4.2.4 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值