当前位置:首页 > 技术文章 > 正文内容

Vue Router 中如何获取路由传递过来的参数?

zonemu3个月前 (07-25)技术文章33

在 Vue Router 中,获取路由传递的参数主要有以下几种方式:

一、通过 $route 对象获取

在 Vue 组件中,可以直接通过 $route 对象访问路由参数:

1、对于动态路由参数(路径参数):

<template>

<div>用户ID: {{ $route.params.id }} </div>

</template>

2、对于查询参数:

<template>

<div>搜索关键词: {{ $route.query.keyword }} </div>

</template>

3、对于 hash 值:

<template>

<div>Hash: {{ $route.hash }} </div>

</template>

二、使用Composition APl的 useRoute 钩子

在 Vue 3 的组合式 AP| 中,可以使用 useRoute 钩子获取路由参数:

<script setup>

import { useRoute } from 'vue-router'

const route= useRoute();

console.log(route.params.id)//获取路径参数

console.log(route.query.keyword)//获取查询参数

console.1og(route.hash)//获取 hash 值

</script>

三、通过 props 解耦方式获取

为了解耦组件和路由,可以通过配置路由的 props 选项,将路由参数作为组件的 props 传入:

// 路由配置

const routes = [

{

path: '/user/:id',

component: User,

props: true // 将路由参数作为组件 props 传入

}

]

然后在组件中通过 props 接收:

<script setup>

// Composition API

defineProps({

id: string

})

</script>

<template>

<div>用户ID: {{ id }}</div>

</template>

或者在选项式 API中

<script>

export default{

props:{

id: string

}

}

</script>

扩展知识

1)、路由参数的类型

Vue Router 中的路由参数主要有三种类型:

  1. 路径参数(Params):通过路径定义的动态部分,如 /users/:id
  2. 查询参数(Query):URL中?后面的参数,如 /users?role=admin
  3. Hash 值:URL中#后面的部分,如 /users#profile

2)、路由参数的高级配置

路径参数的高级匹配模式

Vue Router 支持在路径参数中使用正则表达式进行更精确的匹配,

// 只匹配数字 ID

{ path: "/users/:id(\\d+)',component: User }

// 匹配可选参数

{ path: '/users/:username?', component: User }

// 匹配多个参数段

{ path: '/:pathMatch(.*)*', component: NotFound }

函数式 props 传递

可以使用函数来处理和转换路由参数:

const routes = [

{

path: '/search',

component: SearchUser,

props: route => ({

query: route.query.q,

page: Number(route.query.page) || 1 // 转换为数字类型

})

}

]

3)、响应路由参数变化

当在同一个组件中路由参数发生变化时(如从 /users/1 导航到 /users/2 ),组件实例会被复用,不会触发生命周期钩子。此时需要监听路由参数的变化:

使用 watch 监听

<script setup>

import { watch } from 'vue'

import { useRoute } from 'vue-router'

const route = useRoute()

watch(() => route.params.id,(newId,oldId) => {

// 路由参数变化时执行的逻辑

console.log(`路由从 ${oldId} 变为 ${newId}`)

// 重新获取数据等操作

})

</script>

使用导航守卫

<script setup>

import { onBeforeRouteUpdate } from 'vue-router'

onBeforeRouteUpdate(async (to,from) => {

// 可以在这里执行异步操作

const userData = await fetchUser(to.params.id)

// 还可以取消导航

})

</script>

4)、实际应用场景

用户详情页: 通过 ID 获取不同用户信息

/users/:id // 获取 route.params.id

产品筛选页: 通过查询参数筛选产品

/products?category=electronics&sort=price // 获取 route.query.category 和 route.query.sort

多级路由参数:嵌套的动态路由


/users/:userId/posts/:postId //
获取 route.params.userId 和 route.params.postId

Vue Router 的官方文档提供了更多详细信息,可以访问以下链接了解更多:

动态路由匹配:
https://router.vuejs.org/zh/guide/essentials/dynamic-matching.html

路由组件传参:
https://router.vuejs.org/zh/guide/essentials/passing-props.html

相关文章

GitLab-合并请求(gitlab合并请求合并者还原图解)

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到...

用IDEA开发如何用Git快速拉取指定分支代码?

1,准备空的文件夹,git init2,关联远程仓库,git remote add origin gitlab地址3,拉取远程分支代码,git pull origin 远程分支名再用IDEA打开项目即...

(在线编辑DWG)网页CAD二开实现焊接符号绘制

前言在工程制图和制造领域,焊接符号(Welding Symbols)是用于表示焊缝类型、尺寸、位置以及工艺要求的标准化图形语言。广泛应用于机械设计、钢结构、船舶制造、压力容器等行业中,帮助技术人员理解...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockers...

最快认知什么才是HTML5广告!(h5广告设计是什么)

H5广告似乎是自UI风靡之后,又一个热度极高的词儿。他是什么?一个字母加一个数字是个什么意思? 为什么如此受欢迎?金色号角会议室,创作事业部赵阳同学就HTML5广告做了详尽生动的分享,带大家一起用手机...

HTML5培训学习(简单明了)(html5教学视频教程)

这些事HTML5培训认为在学习HTML5前应该做好的准备,欢迎参考指正:为什么学习HTML5?软硬件环境介绍HTML5环境搭建常见问题解决掌握技能需求为什么学习HTML5?1:自从2010年HTML5...