uniApp页面通讯大汇总,如何页面之间传值

news/2024/11/8 14:55:02/

文章目录

  • 往期回顾
  • 页面通讯
    • 出现场景
    • 通讯方案
      • 通讯方案小结
    • 如何父传子
      • 页面跳转时序图
    • uni.\$on和eventChannel.on使用推荐

往期回顾

uniapp 踩坑记录 uni.$on为什么不能修改data里面的数据

页面通讯

出现场景

我们在一个页面往另一个页面跳转的时候,希望跳转的页面的参数是动态生成的,可以复用的。比如我们在逛淘宝的时候,我们点击一个商品,进去就是商品的详情页。商品和商品详情页的对应关系就需要商业页面给商品详情页面传递商品的信息参数

点击对应商品
传递对应的商品信息
商品列表
商品详情页

而且有时候我们甚至希望能传递多个通讯信息。这样跳转的页面就可以提供更加差异化的复制功能。

通讯方案

序号通讯方法方法名优点缺点适用场景
1页面缓存uni.setStorage(OBJECT)
uni.getStorage(OBJECT)
全局缓存,下次打开依然存在,存取方便,官方自带同步异步缓存方法不适合页面通讯,使用频次低的缓存。因为数量多了不好管理全局的动态变量,例如用户名,用户等级,用户权限等
2Vue全局变量vue.prototype.key=一次设置,全局使用同页面缓存封装好的方法
3路由通讯uni.navigateTo(OBJECT)通过跳转的在url里面添加?key=value设置变量,在onLoad里面取出变量。使用方便需要自己将对象转化为url对应参数,而且对象深度只能为一层,url长度有限制跳转页面传递简单变量
4页面通讯uni.$emit(eventName,OBJECT)
uni.$on(eventName,callback)
使用key进行通讯,可以多次通讯而不是打包一起通讯,方便业务迭代key值管理问题,会和全局通讯,容易误触发其它页面全局通讯,页面通讯
5通道通讯,事件通讯EventChannel.emit(string eventName, any args)在路由跳转的success里面实现通讯只能1对1页面通讯,不能全局通讯跳转页面通讯

通讯方案小结

通讯总体分类通讯方法序号通讯特点
直接通讯3,4,5直接页面传值通讯,适用于局部通讯和页面唤醒
间接通讯1,2通过修改和读取全局变量,适合全局静态变量

uni.$emit和EventChannel.$emit的区别

uni.$emitEventChannel.$emit
父传子在success里面回调在success里面回调
子传父任意位置在event里面回调
作用域全局,直到被销毁局部,页面销毁即结束
声明简洁稍微有点复杂
使用注意如果是uni.on注册的监听器需要页面退出时销毁无需注意

如何父传子

父传子我看了很久,才从官方文档里面找到父传子的方法。
在这里插入图片描述

页面跳转时序图

A B 页面跳转 页面生成 跳转成功回调函数 A B

以为触发器需要在声明之后才能触发,所以我们需要在回调函数里面触发

A B 页面跳转 页面生成 设置key触发器 跳转成功回调函数 触发key触发器 A B

实际代码

//A页面
uni.navigateTo({url: url,success(res) {console.log('回调函数')uni.$emit('test',{ value:'页面通讯测试' })//页面通讯res.eventChannel.emit('test_data', {value:'通道通讯测试'})//通道通讯}
})//B页面onLoad() {console.log('页面跳转成功')uni.$once('test',res=>{console.log('通讯成功!')console.log(res)})const eventChannel =this.getOpenerEventChannel()eventChannel.on('test_data',res=>{console.log(res)})
}

uni.$on和eventChannel.on使用推荐

两者使用起来其实差不多,都可以达到父传子,子传父的作用。但是因为作用域的原因,evenetChannel在不同页面的变量可以重名,eventChannel更适合父传子,uni.$on适合子传父

eventChannel
uni.emit
eventChannel
uni.emit
子1
子2

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

相关文章

华为申请注册华为鸿蒙商标,华为申请注册“华为鸿蒙”商标,自研操作系统或将实现?-控制器/处理器-与非网...

华为的手机芯片取名为“麒麟”;基带芯片取名“巴龙”;服务器芯片取名“鲲鹏”;服务器平台,取名“泰山”;路由器芯片取名“凌霄”;人工智能芯片取名“昇腾”;5G 服务器芯片取名“天罡”。 除此之…

华为注册鸿蒙商标的故事,华为注册“鸿蒙”商标:意在把传说化为现实奇迹

5 月 25 日,华为的手机芯片取名为 " 麒麟 ";基带芯片取名 " 巴龙 ";服务器芯片取名 " 鲲鹏 ";服务器平台,取名 " 泰山 ";路由器芯片取名 " 凌霄 "&…

Wi-Fi 6关键技术解析

Wi-Fi,是由Wi-Fi联盟进行技术认证和商标授权的一种无线通信技术。它背后的技术标准,则是由美国的电气电子工程师协会(IEEE)制定的802.11系列协议。 Wi-Fi联盟(全称:国际Wi-Fi联盟组织,英语&…

华为 鸿蒙出处,华为商标名“鸿蒙”原来出自《山海经》,网友直呼:“太燃了”...

之前,华为在东莞篮球中心,举行的开发者大会上发布了鸿蒙操作系统。 那么,它到底能干嘛呢?在当日的发布会上,华为CEO余承东表示:如果安卓系统不能用了,鸿蒙OS随时可以用在手机上!此言一出,瞬间点燃了大家期待已久的心!

鸿蒙系统欧洲注册,华为鸿蒙系统曝光后华为欧洲注册商标 为鸿蒙系统国外版打基础...

描述 日前,国家知识产权局商标局网站显示,华为已经申请注册“华为鸿蒙”商标,并标注该商品可用于操作系统程序。 无独有偶,华为鸿蒙系统曝光后华为欧洲注册商标。 “鸿蒙”在中国神话传说中指的是盘古在昆仑山开天辟地之前的一团自…

《智能路由器开发指南》——1.3 开源嵌入式操作系统比较

本节书摘来自异步社区《智能路由器开发指南》一书中的第1章,第1.3节,作者 张永智,李章明,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.3 开源嵌入式操作系统比较 开源嵌入式操作系统,其字面意思有3点&am…

苹果商标计算机辅助设计,苹果 Apple MacBook Pro 15英寸 2019 详细评测报告

苹果 Apple MacBook Pro 15英寸 2019 详细评测报告 2019-09-02 14:13:12 9点赞 18收藏 2评论 我们的承诺:欧美专业实验室;多国联合测试;没有广告软文! 为了向大家提供最专业公正的专家评级和建议,我们与欧洲,北美,澳大利亚和新西兰的20个消费者组织合作。笔记本电脑测试…

IOS,ISO,OSI,交换机,路由器,MAC地址,网卡,网关,DNS,DNS服务器,名词解释...

IOS,ISO,OSI,交换机,路由器,MAC地址,网卡,网关,DNS,DNS服务器,名词解释 IOS: iOS是由苹果公司开发的移动操作系统 。苹果公司最早于2007年1月9日的…