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

【uniapp】getOpenerEventChannel().once 接收参数无效的解决方案

uniapp项目开发跨平台应用常会遇到接收参数无效的问题,无法判断是哪里出错了,这里是讲替代的方案,现有三种方案可选。

原因

一般我们是这样处理向另一个页面传参,代码是这样写的

//...
let { title, type, rank } = args;
uni.navigateTo({
	url:'/pages_test/index/index',
	success(res) {
		//传参似乎无效
		// res.eventChannel.emit('args', item)
	}
})

另一个页面处理接收参数,代码是这样写的

this.getOpenerEventChannel().once('args', res => {
	console.log('args', res)
})

问题

运行在H5平台是没问题,

但是,运行在QQ小程序上,出现问题了,

是传参无效吗

res.eventChannel.emit(‘args’, item)

还是接收参数无效

this.getOpenerEventChannel().once(‘args’, res={})

还有,运行在微信小程序上,也有问题,

这次出现的问题不同,第一次传参有效,第二次以上传参就无效

看起来那么不靠谱,接下来,讲一下可行的替代方案

方案一

等待渲染完成后处理,参考代码

this.$nextTick(()=>{
	this.getOpenerEventChannel().once('args', res => {
		console.log('args', res)
	})
})

方案二

将传参转为字符串,加到url地址后面

//...
let { title, type, rank } = args;
uni.navigateTo({
	url:'/pages_test/index/index?args='+JSON.stringify({ title, type, rank }),
	fail(err) { }
})

然后,在另外页面接收的方法中获取即可

onLoad(options) {
	if(options.args){
		let args = JSON.parse(options.args);
		console.log('has args', args);
	}
},

方案三

将传参设置到全局变量中

//设置传参
getApp().globalData.args = args;

在另外的页面中读取

//获取参数
let gData = getApp().globalData;
let args = gData.args;
console.log('has args', args);
gData.args=null;//如果只用一次,那就清除

总结

视情况选择吧

  • 在QQ小程序上用方案一仍然是无效的
  • 如果传参不多,就用方案二
  • 传参多的话,就用方案三

谢谢观看

相关文章:

  • 【蓝桥杯集训·每日一题】Acwing 3729. 改变数组元素
  • 集成电路相关书籍
  • 【项目】Vue3+TS CMS 基本搭建相关配置
  • KDHX-8700无线高压核相相序表
  • AMD发布23.2.1 新驱动 支持开年新作《魔咒之地》
  • JVM类加载机制
  • ACM第一周---周训---题目合集.
  • Java网络编程之UDP和TCP套接字
  • 最最普通程序员,如何利用工资攒够彩礼,成为人生赢家
  • 从事架构师岗位快2年了,聊一聊我对架构的一些感受和看法
  • Windows11去掉不满足系统要求的提示水印
  • 【算法自由之路】 贪心算法
  • HTTP协议——详细讲解
  • java中volatile与synchronized的区别,volatile为什么不能保证原子性
  • 01背包问题 AcWing(JAVA)
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • Angular 响应式表单 基础例子
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • export和import的用法总结
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Mac转Windows的拯救指南
  • PAT A1092
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vagrant 添加本地 box 安装 laravel homestead
  • Web Storage相关
  • 高性能JavaScript阅读简记(三)
  • 机器学习学习笔记一
  • 机器学习中为什么要做归一化normalization
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 普通函数和构造函数的区别
  • 巧用 TypeScript (一)
  • 时间复杂度与空间复杂度分析
  • 学习JavaScript数据结构与算法 — 树
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 硬币翻转问题,区间操作
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #、%和$符号在OGNL表达式中经常出现
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)(1.9) MSP (version 4.2)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (循环依赖问题)学习spring的第九天
  • (转)平衡树
  • (转)人的集合论——移山之道
  • .Net Memory Profiler的使用举例
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @取消转义
  • [<MySQL优化总结>]