Vue2中路由参数($route.params和$route.query)的使用方法详解

 更新时间:2026年05月27日 08:16:24   作者:蜡台  
这篇文章主要为大家详细介绍了Vue2中路由参数($route.params和$route.query)的使用方法,包括动态路径参数和URL查询参数的获取,并提供了多种写法示例,希望对大家有所帮助

前置说明

Vue2 路由对象:

  • $route.params动态路径参数(如 /user/:id
  • $route.queryURL 查询参数(如 /user?name=xxx

1. 基础用法(class 装饰器组件,主流写法)

1.1 获取 query 参数(?key=val)

路由配置:

// router/index.ts
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/demo',
      name: 'Demo',
      component: () => import('@/views/Demo.vue')
    }
  ]
})

访问地址:/demo?name=张三&age=18

组件代码:

<template>
  <div>
    <p>姓名:{{ name }}</p>
    <p>年龄:{{ age }}</p>
  </div>
</template>

<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'

@Component
export default class Demo extends Vue {
  // 直接在生命周期取值,添加类型
  name!: string
  age!: number

  created() {
    // query 取值
    this.name = this.$route.query.name as string
    this.age = Number(this.$route.query.age)
  }
}
</script>

1.2 获取 params 动态路由参数(/:id)

路由配置:

routes: [
  {
    path: '/user/:id', // 动态参数 id
    name: 'User',
    component: () => import('@/views/User.vue')
  }
]

访问地址:/user/1001

组件取值:

<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'

@Component
export default class User extends Vue {
  userId!: number

  created() {
    // params 取值
    this.userId = Number(this.$route.params.id)
  }
}
</script>

2. Vue.extend 写法(无装饰器)

import Vue from 'vue'

export default Vue.extend({
  data() {
    return {
      id: 0,
      username: ''
    }
  },
  created() {
    // params
    this.id = Number(this.$route.params.id)
    // query
    this.username = this.$route.query.username as string
  }
})

3. 路由参数类型定义(TS 进阶,推荐)

$route 自定义参数类型,消除 any 警告,提升类型提示。

3.1:扩展 Vue 路由类型

新建 src/types/vue-router.d.ts

import 'vue-router'

declare module 'vue-router' {
  interface RouteParams {
    id?: string
  }
  interface RouteQuery {
    name?: string
    age?: string
  }
}

3.2:组件直接使用

TS 会自动识别参数类型,无需强转:

created() {
  // params 自带类型
  const id = this.$route.params.id
  // query 自带类型
  const name = this.$route.query.name
}

4. 路由跳转并传参(配套使用)

4.1 传 query 参数

// 编程式导航
this.$router.push({
  path: '/demo',
  query: { name: '李四', age: 20 }
})

4.2 传 params 参数

必须搭配 name + routes 配置动态参数,path + params 不生效:

this.$router.push({
  name: 'User', // 路由配置里的 name
  params: { id: 1002 }
})

5. 监听路由变化(同组件路由跳转,组件不刷新)

路由地址改变但组件复用(如 /user/1/user/2),created/mounted 不会重新执行,需要 watch 监听:

<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'

@Component({
  watch: {
    // 监听整个路由对象
    $route(to) {
      console.log('新参数:', to.params.id, to.query.name)
      this.handleRouteParams()
    }
  }
})
export default class User extends Vue {
  handleRouteParams() {
    const id = Number(this.$route.params.id)
    console.log('当前id:', id)
  }

  created() {
    this.handleRouteParams() // 首次进入执行
  }
}
</script>

常见坑 & 注意点

  • params 参数永远是 string 类型 路由解析后 params 值默认字符串,数字务必手动 Number() 转换。
  • path + params 无效params 只能用 name 跳转。
  • 刷新页面 params 丢失 params 不会保留在 URL 地址栏,刷新丢失;query 会拼接在地址栏,刷新保留。
  • TS 提示 $route 不存在 检查路由是否全局挂载、shims 文件是否正常。
  •  严格模式下 ! 非空断言 若参数必传,使用 变量!: 类型 绕过 TS 空值校验

到此这篇关于Vue2中路由参数($route.params和$route.query)的使用方法详解的文章就介绍到这了,更多相关Vue2路由参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解mpvue实现对苹果X安全区域的适配

    详解mpvue实现对苹果X安全区域的适配

    这篇文章主要介绍了详解mpvue实现对苹果X安全区域的适配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 关于ElementPlus中的表单验证规则详解

    关于ElementPlus中的表单验证规则详解

    这篇文章主要介绍了关于ElementPlus中的表单验证,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Vue中进行数据缓存的使用示例

    Vue中进行数据缓存的使用示例

    数据缓存可以提高应用程序的性能,减少网络请求,提高用户体验,在本文中,我们介绍了Vue中如何进行数据缓存,并提供了一些示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Webpack打包图片-js-vue 案例解析

    Webpack打包图片-js-vue 案例解析

    在开发中我们会有各种各样的模块依赖,这些模块可能来自于自己编写的代码,也可能来自第三方库,本文给大家介绍Webpack打包图片-js-vue的相关知识,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • element-ui tree 手动展开功能实现(异步树也可以)

    element-ui tree 手动展开功能实现(异步树也可以)

    这篇文章主要介绍了element-ui tree 手动进行展开(异步树也可以),项目中用到了vue的element-ui框架,用到了el-tree组件,需要的朋友可以参考下
    2022-08-08
  • vue3 template转为render函数过程详解

    vue3 template转为render函数过程详解

    在 Vue 中,template 模板是我们编写组件的主要方式之一,而 Vue 内部会将这些模板转换为 render 函数,render 函数是用于创建虚拟 DOM 的函数,通过它,Vue 能够高效地追踪 DOM 的变化并进行更新,下面我会通俗易懂地详细解释 Vue 如何将 template 转换为 render 函数
    2024-10-10
  • Vue生命周期和钩子函数的详解与经典面试题

    Vue生命周期和钩子函数的详解与经典面试题

    Vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,下面这篇文章主要给大家介绍了关于Vue生命周期和钩子函数的相关资料,需要的朋友可以参考下
    2021-10-10
  • 关于移动端与大屏幕自适应适配方案

    关于移动端与大屏幕自适应适配方案

    这篇文章主要介绍了关于移动端与大屏幕自适应适配方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue3 中 watch 与 watchEffect 区别及用法小结

    Vue3 中 watch 与 watchEffect 区别及用法小结

    这篇文章主要介绍了Vue3 中 watch 与 watchEffect 有什么区别?watch中需要指明监视的属性,也需要指明监视的回调,而watchEffect中不需要指明监视的属性,只需要指明监视的回调,回调函数中用到哪个属性,就监视哪个属性,本文给大家详细介绍,需要的朋友参考下
    2022-06-06
  • Vue中this.$nextTick()的具体使用

    Vue中this.$nextTick()的具体使用

    本文主要介绍了Vue中this.$nextTick()的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论