首页 > 其他分享 >Vue路由传参和接参如何实现

Vue路由传参和接参如何实现

时间:2024-07-12 21:30:16浏览次数:15  
标签:传参 片段 Vue route 接参 params query id 路由

在Vue中,使用Vue Router进行页面路由跳转时,经常需要传递参数到目标页面(组件)并在目标页面(组件)中接收这些参数。Vue Router提供了几种方式来实现路由传参和接参,主要包括通过URL的查询参数(query)、动态路由匹配(params)以及命名路由配合paramsquery使用。下面将分别介绍这几种方式。

1. 通过查询参数(Query Parameters)

传参

使用$router.push<router-link>to属性,并将参数放在URL的查询字符串中。

// 使用编程式导航  
this.$router.push({ path: '/foo', query: { userId: 123 }})  
  
// 使用声明式导航  
<router-link :to="{ path: '/foo', query: { userId: 123 }}">Go to Foo</router-link>
接参

在目标组件中,可以通过this.$route.query来获取这些参数。

export default {  
  mounted() {  
    // 访问查询参数  
    console.log(this.$route.query.userId) // 输出: 123  
  }  
}

 

2. 通过动态路由匹配(Dynamic Route Matching)

定义路由

首先,在路由配置中定义动态片段。

const routes = [  
  { path: '/user/:id', component: User }  
]
传参

使用$router.push<router-link>to属性,并将动态片段的值作为参数。

// 使用编程式导航  
this.$router.push({ name: 'user', params: { id: 123 }}) // 注意:这里应该是query或path,但path需要包含实际的:id值  
this.$router.push('/user/123') // 更直接的方式  
  
// 使用声明式导航  
<router-link :to="{ name: 'user', params: { id: 123 }}">Go to User</router-link> // 错误使用,应使用path或name与query  
<router-link to="/user/123">Go to User</router-link> // 正确
接参

在目标组件中,通过this.$route.params(对于星号片段)或this.$route.params.id(对于普通动态片段)来获取参数。但请注意,对于普通的动态片段(如上面的/user/:id),你应该使用this.$route.params.id,但Vue Router实际上在内部使用this.$route.params来存储星号片段的匹配结果,对于普通的动态片段,参数是通过解析URL得到的,并可以直接通过this.$route.params访问(但通常我们会说它存储在$route.params.xxx中,这里的xxx是动态片段名),但更常见的做法是直接从$route对象上访问解析后的URL片段作为属性(如this.$route.params.id),然而,对于这种情况,实际上应使用this.$route.params.id的前提是你在路由配置中使用了*(星号)匹配,并且配合了children路由,或者使用了alias等特殊配置。对于简单的动态路由匹配(如上例),我们通常通过this.$route.params直接访问到的将是undefined(因为Vue Router并没有特别地将它存储在$route.params下,而是直接通过URL解析得到的),我们实际上应该通过URL的结构来访问它,但在这个场景下,因为它是作为URL的一部分被解析的,所以我们通常不需要显式地“接参”,因为它已经作为路由的一部分被解析并传递给了组件。然而,为了说明如何“接参”,我们可以这样做(尽管这实际上是不必要的):

export default {  
  mounted() {  
    // 访问动态片段  
    if (this.$route.params.id) {  
      // 注意:对于简单的动态路由匹配,这里通常不会有任何输出  
      // 因为this.$route.params.id在这种情况下是undefined  
      // 但如果使用了星号片段或其他特殊配置,这里可能会有值  
      console.log(this.$route.params.id)  
    }  
    // 更常见的做法是直接从$route对象上访问动态片段  
    console.log(this.$route.params.id || this.$route.path.split('/').pop()) // 输出: 123(对于'/user/123')  
  }  
}

 注意:上面的`this.route.params.id∣∣this.route.

标签:传参,片段,Vue,route,接参,params,query,id,路由
From: https://blog.csdn.net/ggq53219/article/details/140312591

相关文章

  • 在Vue中,子组件向父组件传递数据
    在Vue中,子组件向父组件传递数据通常通过两种方式实现:事件和回调函数。这两种方式允许子组件与其父组件进行通信,传递数据或触发特定的行为。1.通过事件传递数据子组件可以通过触发自定义事件,并将数据作为事件的参数来向父组件传递数据。子组件:<template><div>......
  • idea启动vue项目一直卡死在51%,问题分析及其如何解决
    如果你的项目也一直卡在百分之几十,你可以参考下面的方法,试一试能否解决问题描述:通过在idea终端中输入命令npmrunserve启动vue项目,启动进程一直卡在51%如何解决:检查<template>标签中的html内容是否被唯一一个根标签包裹......
  • zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题
    解决过程第一次排查最开始排查的是官方文档说的https://api.onlyoffice.com/editors/troubleshooting#key解决方案。参考的是官方的https://github.com/ONLYOFFICE/document-server-integration/releases/latest/download/Python.Example.zip基于Django的Python代码。......
  • Vue2与Vue3的区别
    Vue2官方已经发布不再维护了,很多公司也开始纷纷使用vue3了。那么vue3和vue2有哪些不同呢?vue3(下面简称v3)又在vue2(下面简称v2)上做了哪些拓展与改进呢?(1)首先最大的区别是数据双向绑定的改进,v2用的是es5的数据劫持Object.definedProperty,这个会一开始就给所有的数据设置了监听,比......
  • 简易Token认证系统实现指南(Spring Boot - Vue)
    在现代Web应用中,用户认证是一个不可或缺的部分。除了传统的会话/cookie认证方式,Token认证提供了一种无状态、可扩展的认证机制。在本文中,我将向您展示如何在一个SpringBoot应用中实现一个简易的Token认证系统 什么是Token认证?Token认证是一种安全机制,通常使用JSONWebToke......
  • 适合小白学校的springboot2 vue3 图书管理系统idea开发mysql数据库
    博主介绍:专注于Java.net phpphython 小程序等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟我的博客空间发布了1000+毕设题目方便大家学习使用感兴趣的可以先收藏起来,还有大家在......
  • 用Vue3和Plotly.js实现3D小提琴图的交互式可视化
    本文由ScriptEcho平台提供技术支持项目地址:传送门小提琴图:绘制性别账单分布应用场景小提琴图是一种数据可视化工具,用于比较不同组别的分布。它结合了箱线图和核密度估计,可以直观地展示数据的中心趋势、离散度和分布形状。小提琴图常用于比较不同性别、年龄组或其他类别......
  • 使用 Vue 和 Plotly.js 创建交互式 3D 网格图
    本文由ScriptEcho平台提供技术支持项目地址:传送门使用Vue和Plotly.js创建交互式3D网格图应用场景介绍3D网格图是一种强大的可视化工具,可用于表示具有三个维度的数据。它们广泛应用于科学、工程和医学等领域,用于显示复杂数据并揭示潜在模式。代码基本功能介绍......
  • 2024-07-12 vue项目中 运行 npm run build 或 yarn build 打包 没有生成 xx.es.js 文
    我在写一个ui组件库,在打包时发现dist文件夹里没有生成我想要的xx.es.js文件,我查看了我的vue项目中的vue.config.js文件,发现build.lib没有指定输出的文件名解决方案:配置项目中的vue.config.js文件,参考我的......
  • Vue遇到MathJax渲染的数学公式在翻页后仍然停留或无法动态加载
    Vue遇到MathJax渲染的数学公式在翻页后仍然停留或无法动态加载在使用Vue.js时,遇到MathJax渲染的数学公式在翻页后仍然停留的问题,通常是因为Vue的单页面应用(SPA)特性导致的DOM更新问题。MathJax通常在页面加载时渲染数学公式,但在SPA中,页面切换时可能不会重新渲染MathJax,导致......