当前位置: 首页 > 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小程序上用方案一仍然是无效的
  • 如果传参不多,就用方案二
  • 传参多的话,就用方案三

谢谢观看

http://www.lryc.cn/news/7686.html

相关文章:

  • ELK分布式日志收集快速入门-(二)kafka进阶-快速安装可视化管理界面-(单节点部署)
  • 线程的创建
  • 分布式之Paxos共识算法分析
  • 35岁测试工程师,面临中年危机,我该如何自救...
  • 时间轮算法概念
  • [SCTF2019]babyre 题解
  • 全志H3系统移植 | 移植主线最新uboot 2023.04和kernel 6.1.11到Nanopi NEO开发板
  • vue项目第四天
  • 「C语言进阶」数据内存的存储
  • 面试必问:进程和线程的区别(从操作系统层次理解)
  • ModuleNotFoundError: No module named ‘apex‘与 error: legacy-install-failure
  • Python3 VScode 配置
  • VMware 修复了三个身份认证绕过漏洞
  • 实现一个简单的Database10(译文)
  • CTF-取证题目解析-提供环境
  • 计算机基础 | 网络篇 | TCP/IP 四层模型
  • 实时数据仓库
  • leetcode 1250. 检查「好数组」
  • JDK动态代理和CGLib动态代理的区别
  • Leetcode.1250 检查「好数组」
  • WMS系统推荐,如何选到适合企业的仓库管理系统
  • C语言的期末复习
  • 强化学习之DQN论文介绍
  • 使用luaBridge添加自己的C++脚本插件能力
  • 再拾起博客
  • Mybatis流式游标查询-大数据DB查询OOM查询问题
  • 以before为例 完成一个aop代理强化方法案例
  • 好记性不如烂笔头之Java基础复习笔记
  • MyBatisPlus
  • 【C语言】编程初学者入门训练(11)