vue3路由跳转传参与接收

本文介绍了如何在前端使用main.js引入并管理页面跳转,包括通过页面引入文件、利用router进行参数传递,以及接收和处理从路由传来的参数。重点讲解了Vue、React或Angular等框架中的路由操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

main.js引入

 页面引入

页面跳转传参 

页面跳转router

 

 页面接收路由传参

页面接收route

### Vue 3 中通过路由跳转递对象参数 在 Vue 3 的项目中,可以通过 `params` 或查询字符串 (`query`) 来实现路由跳转递对象类型的参数。以下是两种常见的方法及其具体实现方式。 #### 方法一:通过 `params` 递对象 当需要将复杂数据作为路径的一部分时,可以使用 `params` 方式来递对象。需要注意的是,由于 URL 只能接受字符串形式的数据,因此需要先将对象序列化为 JSON 字符串再进行递,在目标页面解析回对象即可[^2]。 ```typescript // 跳转前的组件 (如 HomeView.vue) this.$router.push({ name: 'targetRouteName', params: { obj: JSON.stringify({ key1: 'value1', key2: 'value2' }) } }); ``` 接收端则需注意从 `route.params.obj` 获取到的内容是一个经过编码后的字符串,所以要将其转换回来: ```javascript // 接收方组件 (如 AboutView.vue) const receivedObj = this.$route.params.obj ? JSON.parse(decodeURIComponent(this.$route.params.obj)) : null; console.log(receivedObj); // 输出应为 {key1: 'value1', key2: 'value2'} ``` 这种方法的优点在于保持了 URL 清晰可读;缺点则是不适合携带特别大的或者敏感的信息因为它们会暴露于地址栏之中。 #### 方法二:利用 `query` 参数输对象 另一种更隐蔽的方式就是采用 `query` 参数来进行同样的操作。这种方式不会改变实际访问路径名,只是附加了一些额外信息给当前请求链接后面加上?号以及键值对的形式表示出来。 ```typescript // 发起跳转的地方 this.$router.push({ path: '/about', query: { obj: encodeURIComponent(JSON.stringify({ keyA: 'dataA', keyB: 'dataB' })) } }); ``` 而在接收侧,则同样地解码这些信息: ```javascript // 目标组件内部处理逻辑 mounted() { const queryStringObject = this.$route.query.obj ? decodeURIComponent(this.$route.query.obj) : '{}'; try { let parsedQuery = JSON.parse(queryStringObject); console.log(parsedQuery); // 应该打印出 {keyA: 'dataA', keyB: 'dataB'} } catch(e){ console.error('Failed to parse object from query string:', e.message); } } ``` 此法适合那些不希望影响URL语义结构却又要共享少量状态的应用场景下非常有用。 --- ### 总结 无论是选用哪种途径完成跨页间通讯需求都各有优劣之处——如果追求直观简洁的话可以选择前者即基于命名路由加参数模式;而后者借助GET请求附带询问字段相对更加灵活隐秘一点。最终的选择取决于具体的业务背景和个人偏好等因素共同决定。 ```python # 示例 Python 风格伪代码展示概念而非真实语法 def navigate_with_params(target_name, data): router.push({"name": target_name, "params": {"obj": json.dumps(data)}}) def retrieve_param(): raw_data = route.params.get("obj") return json.loads(urllib.parse.unquote(raw_data)) def navigate_with_query(path, data): encoded_data = urllib.parse.quote(json.dumps(data)) router.push({"path": path, "query": {"obj": encoded_data}}) def get_query_object(): raw_string = request.args.get("obj", "{}") decoded_str = urllib.parse.unquote(raw_string) return json.loads(decoded_str) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值