当前位置: 首页 > news >正文

Vue2 + TS,分路径参数、查询参数、装饰器组件 / Vue.extend 两种写法,同时补充类型约束、监听路由、动态路由取值。

前置说明

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 空值校验
http://www.jsqmd.com/news/893739/

相关文章:

  • 智能体技能开发
  • Unity之PhotonServer使用注意
  • 智能驾驶的“定海神针”:一文读懂高精度定位技术
  • AI搜索时代,用户的决策路径变了——品牌为什么要重新理解“触达”
  • 除了Python,你的Linux服务器上还有哪些软件能用alternatives管理?JDK、GCC实战指南
  • 从怀疑到真香!2026我亲测十多款视频链接转文字只留这一款超好用
  • OPC中国是什么?一文读懂OPC开源共创社区
  • 为什么83%的保险中台项目失败?Lovable系统开发中的4层信任架构设计(含银保监备案对照表)
  • CANN ops-transformer:RMSNorm 算子的数值精度分析
  • KRAS和MYC协同抑制:一种靶向KRAS突变癌症的强效策略
  • 2026年无尘车间厂家推荐榜:食品/电子/制药/半导体/新能源等百级至十万级洁净车间源头公司实力解析 - 企业推荐官【官方】
  • 2026年5月知名的东莞二氧化碳气体厂家推荐推荐榜,高纯二氧化碳/工业二氧化碳/液态二氧化碳/焊接用二氧化碳厂家选择指南 - 海棠依旧大
  • App过审大招!上架/更新不怕被拒 | ASO秘籍
  • 微信小程序商城搭建教程(适合无技术、预算低)零基础就能自己搭建
  • Linux 内存、磁盘、CPU负载全方位查看命令(服务器日常巡检全套)
  • 地平线6上线狂喜!UU远程让我工作日摸鱼飙遍日本樱花赛道[特殊字符][特殊字符]
  • STM32实战:从ADC采样到FFT频谱分析的完整工程指南
  • 2026年度AI大模型API中转站权威榜单:主流服务商性能与成本全维度评测排名
  • 2026年现阶段,如何筛选安徽图文快印服务商?这份深度指南与品牌解析请查收 - 2026年企业资讯
  • 2026现阶段如何选择可靠的钻筒服务团队?优质供应商深度解析 - 2026年企业资讯
  • 远程断电报警器:温度断电同步监测,无人场景也安心
  • 我是如何把一个接口的响应时间从 2s 优化到 50ms 的
  • 毫米波雷达:智能驾驶的“全天候之眼”,一文读懂原理、应用与未来
  • 保姆级教程:在Ubuntu 22.04上为你的RDMA应用创建第一个Protection Domain (PD)
  • 2026年PDF转Word免费推荐:这5款工具真正无损还原格式 - 时时资讯
  • 2026数据中台选型指南
  • 市面上好用的命理有哪些?这几点挑错等于白花钱
  • 2026年 徐州/江苏柜体厂家推荐排行榜:多层无漆柜体、实木烤漆柜体、橱柜衣柜阳台柜柜体源头实力品牌精选 - 品牌企业推荐师(官方)
  • 2026 实测!视频号视频无水印下载方法
  • 2026年5月有实力的快装阳光房配件厂家排行推荐榜,快装阳光房配件、阳光房连接件、阳光房角码厂家选择指南 - 海棠依旧大