【Vue 3 | Uniapp】 从一个页面 (index) 传输数值到另一个页面 (form) 的方法详解(附Demo)

news/2025/2/26 21:18:20/

目录

  • 前言
  • 1. URL 参数
  • 2. eventChannel 通信
  • 3. Vuex共享
  • 4. localStorage 或 sessionStorage

前言

在 Vue 3 开发中,经常需要在不同组件或页面之间传递数据,例如从 index 页面获取某个数值(如 cntr、tradeId)后,将其传输到 form 页面进行填写或编辑

本文将介绍几种常见的数据传输方法,并为每种方法提供一个小的 Demo 代码示例

基本的知识推荐阅读:详细分析uni-app中的页面路由基本知识(附Demo)

总结对比

方法适用场景适用数据类型是否持久化数据是否暴露
URL 传参传递简单数据(ID、状态值)字符串、数字
eventChannelnavigateTo 方式传递复杂数据对象、数组
Vuex多个页面共享数据对象、数组
localStorage短期数据存储、页面刷新保持对象、数组

推荐方案

  1. 如果只是传递少量数据(如 ID),URL 传参最简单
  2. 如果需要传递复杂对象(如 JSON),推荐 eventChannel
  3. 如果多个页面共享数据,Vuex 是更好的选择
  4. 如果需要在页面刷新后仍保留数据,localStorage 是不错的方案

一开始博主使用的第一种,后续由于参数过多,使用第二种:

在这里插入图片描述

1. URL 参数

适用于简单数据传递,如字符串、数字等

实现步骤

  1. 在 index 页面使用 uni.navigateTothis.$router.push 传递参数
  2. 在 form 页面通过 onLoad(options)this.$route.query 解析参数

index.vue

methods: {goToForm() {uni.navigateTo({url: `/pages/form/form?cntr=manong123&tradeId=1`});}
}

form.vue

onLoad(options) {this.cntr = options.cntr || "";this.tradeId = options.tradeId || "";
}

优缺点
✅ 适合小型数据传输,如 ID、状态值等
❌ 无法传输复杂对象(如 JSON),会导致数据丢失

2. eventChannel 通信

适用于需要传输复杂数据(如对象、数组)且不希望数据暴露在 URL 参数中的情况

实现步骤

  1. index 页面通过 success 回调,使用 eventChannel.emit 传输数据
  2. form 页面通过 getOpenerEventChannel().on 监听并接收数据

index.vue

methods: {goToForm() {uni.navigateTo({url: `/pages/form/form`,success: (page) => {if (page.eventChannel) {page.eventChannel.emit("setItemData", {cntr: "manong123",tradeId: "1",driverName: "码农研究僧"});}}});}
}

form.vue

onLoad(options) {const eventChannel = this.getOpenerEventChannel();eventChannel.on("setItemData", (itemData) => {this.itemData = itemData;});
}

优缺点
✅ 适合传输复杂数据,如 JSON 对象
✅ 数据不会暴露在 URL,安全性较高
❌ 仅适用于 uni.navigateTo 方式,不适用于 redirectTo 或 switchTab

3. Vuex共享

适用于多个页面共享数据,或者希望数据在页面间持久化的情况

实现步骤

  1. 在 Vuex 的 store 中定义 state 并提供 mutation
  2. index 页面调用 commit 方法存入数据
  3. form 页面通过 mapState 获取数据

store/index.js

export default {state: {itemData: {}},mutations: {setItemData(state, data) {state.itemData = data;}}
};

index.vue

methods: {goToForm() {this.$store.commit("setItemData", {cntr: "manong123",tradeId: "1",driverName: "码农研究僧"});uni.navigateTo({ url: "/pages/form/form" });}
}

form.vue

computed: {itemData() {return this.$store.state.itemData;}
}

优缺点
✅ 适用于全局状态管理,多页面数据共享
✅ 数据不会丢失,即使用户返回上一页
❌ 适用于大规模项目,小项目可能不必要

4. localStorage 或 sessionStorage

适用于页面刷新后仍需保持数据的情况,如缓存用户输入的信息

实现步骤

  1. index 页面存入 localStorage
  2. form 页面从 localStorage 读取数据

index.vue

methods: {goToForm() {uni.setStorageSync("itemData", {cntr: "manong123",tradeId: "1",driverName: "码农研究僧"});uni.navigateTo({ url: "/pages/form/form" });}
}

form.vue

onLoad(options) {this.itemData = uni.getStorageSync("itemData") || {};
}

优缺点
✅ 适用于短期存储,页面刷新后数据仍可用
✅ 可用于 redirectTo、switchTab,不受 eventChannel 限制
❌ 需要手动清理,否则可能导致存储过多无用数据


http://www.ppmy.cn/news/1575094.html

相关文章

智能升级、安全加倍,遨游防爆对讲机拉起通信安防线

在充斥着爆炸性气体和易燃物质的危险作业环境中,通信设备的选择关乎生命安全。一旦通信设备引发电火花,其后果将不堪设想。因此,专为防范易燃易爆环境而设计的防爆对讲机,凭借其独特的防爆技术和设计,成为了这些高风险…

kafka的ACL配置的sasl.kerberos.principal.to.local.rules配置解释

kafka配置acl认证的用户名转换规则 1、Kerberos中的介绍2、自定义sasl user name3、自定义ssl 的用户名4、关于kafka配置kerberos以及开启acl的实践 1、Kerberos中的介绍 Kerberos 关于此配置项的解释 https://web.mit.edu/Kerberos/krb5-latest/doc/admin/conf_files/krb5_co…

DeepSeek 助力 Vue 开发:打造丝滑的 复选框(Checkbox)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

Arm 将自己制造芯片

众所周知,几乎任何目前市面上的手机芯片都是arm公司设计的,这家公司只设计CPU,由苹果、三星、英伟达等厂家再自行生产移动端CPU。 2025年这家英国芯片设计巨头宣布: Arm 将不再只是自己设计芯片,它将自己制造芯片&…

职场发展-遇到以下情况请直接准备后手吧

本文纯来自个人经历,大家可以当个笑话看,但是现实有时候就是这样 1.开始抓细节,作为一个工厂,突然开始抓考勤,开始计较一些之前从来没管过的的事,你就得心思心思是不是要裁员了,也就可以找后手…

目标检测中单阶段检测模型与双阶段检测模型详细对比与说明

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中,PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档,而CSV因其简洁、易操作的特性,广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据,转换为CSV格式可能是一个高效…

LabVIEW 中 codeGenEngine.llb 工具库

codeGenEngine.llb 是 LabVIEW 2019 安装目录下C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\路径下的工具库,主要用于代码生成相关的操作,帮助开发者在 LabVIEW 项目中便捷地实现自动化代码生成任务,提高开发…