vue路由传参:最常用三种方式,通俗易懂!

本文介绍了Vue.js中三种常见的路由传参方式:通过路径参数、通过名称和params属性、通过query参数。每种方式都有其特点及适用场景,并提供了具体的代码示例。

前言

项目中很多情况下都需要进行路由之间的传值,想过很多种方式
sessionstorage/localstorage/cookie 进行离线缓存存储也可以,用vuex也可以,不过有些大材小用吧,不管怎么说因场景而异

下面我来说下vue自带的路由传参的三种基本方式
先有如下场景 点击当前页的某个按钮跳转到另外一个页面去,并将某个值带过去

<div class="examine" @click="insurance(2)">查看详情</div>

第一种方法 :页面刷新数据不会丢失

methods:{
  insurance(id) {
       //直接调用$router.push 实现携带参数的跳转
        this.$router.push({
          path: `/particulars/${id}`,
        })
}

需要对应路由配置如下:

{
     path: '/particulars/:id',
     name: 'particulars',
     component: particulars
   }

可以看出需要在path中添加/:id来对应 $router.push 中path携带的参数。在子组件中可以使用来获取传递的参数值
另外页面获取参数如下

this.$route.params.id

第二种方法: 页面刷新数据会丢失

通过路由属性中的name来确定匹配的路由,通过params来传递参数。

methods:{
  insurance(id) {
       this.$router.push({
          name: 'particulars',
          params: {
            id: id
          }
        })
  }

对应路由配置: 注意这里不能使用:/id来传递参数了,因为组件中,已经使用params来携带参数了。

 {
     path: '/particulars',
     name: 'particulars',
     component: particulars
   }

子组件中: 这样来获取参数

this.$route.params.id

第三种方法
使用path来匹配路由,然后通过query来传递参数
这种情况下 query传递的参数会显示在url后面?id=?

methods:{
  insurance(id) {
        this.$router.push({
          path: '/particulars',
          query: {
            id: id
          }
        })
  }

对应路由配置:

{
     path: '/particulars',
     name: 'particulars',
     component: particulars
   }

对应子组件: 这样来获取参数

this.$route.query.id

特别注意哦,
组件中 获取参数的时候是router 这很重要~~~


动动发财的小手3连一下哦,蟹蟹~


<think>好的,用户想了解Vue.js中$route和$router的区别及用法。首先,我需要回顾一下自己的知识,确保准确无误。 首先,$router是Vue Router的实例,负责整体的路由控制,比如跳转页面、前进后退等。而$route代表当前激活的路由信息,包含路径、参数、查询等。这两个概念容易混淆,但作用不同。 接下来,我需要查阅相关的引用资料来确认。根据用户提供的引用[1],$router是路由实例,而$route是当前路由信息。引用[2]提到$route.query用于获取查询参数,比如URL中的?user=xiaowang。引用[3]则说明$router用于编程式导航,比如push和replace方法。 接下来,我需要组织回答的结构。首先明确两者的定义和所属,然后分点说明各自的功能和用法。可能还需要给出代码示例,让用户更清楚如何使用。比如,用$router.push跳转页面,用$route.params获取参数。 还要注意用户提到的区别,避免混淆。例如,$router是一个全局的路由器对象,而$route是当前路由的对象,每次路由切换都会更新。需要强调这点,帮助用户理解何时使用哪一个。 另外,用户的问题可能隐含他们实际开发中遇到的困惑,比如在组件中如何正确访问路由信息或进行导航。所以,举一些实际场景的例子会更好,比如在方法中使用$router.push,或在模板中使用$route.params.id。 后,检查是否有遗漏点,比如$route的fullPath属性,或者$router的replace方法和push的区别。确保覆盖主要用法和常见问题,确保回答全面且易懂。</think>### $route与$router的区别及用法解析 #### 一、核心概念区别 1. **$router** - 类型:全局路由实例(`VueRouter`对象) - 作用:控制整个路由系统,提供编程式导航方法 - 生命周期:在Vue应用初始化时创建且唯一 - 示例方法: ```javascript this.$router.push('/home') // 导航到指定路径 this.$router.replace('/login') // 替换当前历史记录 this.$router.go(-1) // 返回上一页 ``` 2. **$route** - 类型:当前激活的路由信息对象(响应式数据) - 作用:提供当前路由的详细信息 - 生命周期:随路由切换动态更新 - 关键属性: ```javascript this.$route.path // "/user/123" this.$route.params // { id: "123" } this.$route.query // { name: "vue" } this.$route.hash // "#section" ``` #### 二、功能对比表 | 特性 | $router | $route | |--------------------|----------------------------------|---------------------------------| | 获取方式 | 通过Vue注入的全局对象 | 通过当前路由动态生成 | | 数据性质 | 方法集合(非响应式) | 响应式对象 | | 典型使用场景 | 页面跳转、导航守卫控制 | 获取URL参数、路径信息 | | 修改方式 | 通过push/replace等方法修改路由 | 自动随URL变化更新 | #### 三、实际应用示例 1. **编程式导航** ```javascript // 带参数跳转 this.$router.push({ path: '/user', query: { id: '001' } }) // 命名路由跳转 this.$router.push({ name: 'Profile', params: { userId: 123 } }) ``` 2. **参数获取** ```javascript // 获取动态路由参数 const userId = this.$route.params.id // 解析查询字符串 const searchKeyword = this.$route.query.keyword ``` 3. **监听路由变化** ```javascript watch: { '$route'(to, from) { console.log('路由从', from.path, '切换到', to.path) } } ``` #### 四、常见误区 1. **错误:在路由守卫中直接修改$route** ```javascript // 错误示例 this.$route.query.page = 2 // 不会触发导航 // 正确方式 this.$router.push({ query: { ...this.$route.query, page: 2 } }) ``` 2. **错误:混淆params与query传参** - `params`需要预先定义路由:`path: '/user/:id'` - `query`自动转为URL查询参数:`/user?id=123` [^1]: 路由实例控制导航流程 [^2]: 查询参数解析规范 [^3]: 官方路由解决方案实现原理
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黒客与画家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值