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

uni-app 跳转页面传参

uni-app Vue2 和 Vue3 页面跳转传参方法

在 uni-app 中,无论是 Vue2 还是 Vue3,页面跳转传参的方式基本一致,主要通过 uni.navigateTouni.redirectTo 等 API 实现。以下是常见的方法:


URL 拼接传参

通过 url 拼接参数,目标页面通过 onLoad 生命周期钩子接收参数。

// 跳转页面并传参
uni.navigateTo({url: '/pages/detail/detail?id=123&name=test'
});

目标页面接收参数:

// 目标页面
export default {onLoad(options) {console.log(options.id); // 123console.log(options.name); // test}
}

Vue2 中使用 Vuex:

// store.js
export default new Vuex.Store({state: {pageParams: {}},mutations: {setPageParams(state, params) {state.pageParams = params;}}
});// 发送页面
this.$store.commit('setPageParams', { id: 123, name: 'test' });
uni.navigateTo({ url: '/pages/detail/detail' });// 目标页面
computed: {pageParams() {return this.$store.state.pageParams;}
}

通过事件通道传参(Vue3 推荐)

  • 方法1
    Vue3 中可以使用 uni.$emituni.$on 实现跨页面通信。

发送参数:

// 发送页面
uni.navigateTo({url: '/pages/detail/detail',success: () => {uni.$emit('updateData', { id: 123, name: 'test' });}
});

接收参数:

// 目标页面
export default {mounted() {uni.$on('updateData', (data) => {console.log(data.id); // 123console.log(data.name); // test});},beforeUnmount() {uni.$off('updateData');}
}
  • 方法2
// 发送方uni.navigateTo({url: '/pages/user/order/payment',// 页面跳转传参数(navigateTo 调用成功后)success: (res) => {res.eventChannel.emit('orderInfo', detail)},events: {// 监听b.vue返回的参数successful(data) {console.log(JSON.stringify(data, null, 2))},}});
// 接收方import {getCurrentInstance} from 'vue';const instance = getCurrentInstance();onLoad(() => {const eventChannel = instance.proxy.getOpenerEventChannel();eventChannel.on('orderInfo', (data) => {console.log('data', data)});});

通过本地缓存

对于需要持久化的数据,可以使用 uni.setStorageSyncuni.getStorageSync

发送参数:

uni.setStorageSync('pageParams', { id: 123, name: 'test' });
uni.navigateTo({ url: '/pages/detail/detail' });

接收参数:

// 目标页面
export default {onLoad() {const params = uni.getStorageSync('pageParams');console.log(params); // { id: 123, name: 'test' }}
}

使用 uni.$once 实现一次性传参

Vue3 中可以通过 uni.$once 实现一次性事件监听。

发送参数:

uni.navigateTo({url: '/pages/detail/detail',success: () => {uni.$emit('onceData', { id: 123, name: 'test' });}
});

接收参数:

// 目标页面
export default {mounted() {uni.$once('onceData', (data) => {console.log(data); // { id: 123, name: 'test' }});}
}

总结

  • 简单参数:使用 URL 拼接传参。
  • 复杂数据:Vue2 用 Vuex,Vue3 用 事件通道。
  • 临时数据:使用 uni.$emituni.$on
  • 持久化数据:使用本地缓存。
    根据具体需求选择合适的方式。
http://www.xdnf.cn/news/1142947.html

相关文章:

  • 图机器学习(13)——图相似性检测
  • 西门子工业软件全球高级副总裁兼大中华区董事总经理梁乃明先生一行到访庭田科技
  • OpenTelemetry学习笔记(四):OpenTelemetry 语义约定,即字段映射(1)
  • Simulink建模-Mux与Demux模块虚拟向量的组装与拆解
  • QML vscode语法高亮和颜色区分。
  • 51c视觉~合集13
  • 用 React-Three-Fiber 实现雪花下落与堆积效果:从零开始的 3D 雪景模拟
  • 【HCI log】Google Pixel 手机抓取hci log
  • 几款开源的安全监控与防御工具分享
  • 零碳园区势在必行!安科瑞EMS3.0助力园区低碳智慧升级
  • RS485转PROFIBUS DP网关写入命令让JRT激光测距传感器开启慢速模式连续测量
  • CityEngine自动化建模
  • HTTP性能优化实战技术文章大纲
  • 设计循环队列oj题(力口622)
  • 铁路基础设施无人机巡检技术及管理平台
  • Glary Utilities(系统优化工具) v6.20.0.24 专业便携版
  • 麒麟操作系统unity适配
  • Spring全面讲解(无比详细)
  • SpringBoot中使用MessageSource的getMessage获取i18n资源文件中的消息
  • [spring6: PointcutAdvisor MethodInterceptor]-简单介绍
  • Spring学习笔记:Spring SPEL表达式语言深入的学习和使用
  • 算法竞赛备赛——【图论】求最短路径——小结
  • [论文阅读] 人工智能 + 软件工程 | 单会话方法论:一种以人类为中心的人工智能辅助软件开发协议
  • nginx-http反向代理与负载均衡
  • Mysql定位慢查询
  • 数组/链表/【环形数组】实现 队列/栈/双端队列【移动语义应用】【自动扩缩】
  • 前端笔记之 async/await 异步编程详解
  • A33-vstar笔记及资料分享:搭建交叉编译环境
  • 怎么把图片做成实拍的感觉?给图片加上拍摄时间,相机信息等就可以了
  • Linux系统安装Docker及部署Node.js 20.15.0(含pnpm、pm2)完整指南