浅谈小程序跨页面之间通信的思路方式(小程序跨页面数据同步)

admin1428456年前1条评论

提要:

小程序是由一个个page形成的,如果存在路由栈为[A,B],A->B传值自然能够一层层通报,然而B->A通报数据就需要分外的协助形式,下列探讨多少种罕见的形式。

一、localStorage+onShow
应用处景:A->B/B->A均可

好处:轻易操纵,易明白

缺点:调用到storage,有能够配置失利;且配置后是长久缓存,能够传染原逻辑,应实时删除了

应用示例:

// 以A->B示例 // A 页面Page({onShow(){if(wx.getStorageSync('$datas')){console.log(wx.getStorageSync('$datas'))// 11111}},}) // B 页面
 Page({someActions(){wx.setStorageSync('$datas','11111')},})

二、globalData+onShow
应用处景:A->B/B->A均可

好处:轻易操纵,易明白;间接操纵globalData工具,比拟于storage实行效力更高

缺点:配置后是小程序性命周期内均可访问,能够传染原逻辑,应实时删除了

应用示例:

 // 以A->B示例 // A 页面const app = getApp();Page({onShow(){if(app.globalData.$datas){console.log(app.globalData.$datas)// 11111}},})// B 页面const app = getApp();Page({someActions(){app.globalData.$datas = '11111';},})

三、小程序自身供应的EventChannel
应用处景:首如果B->A

好处:小程序原生供应,可随时废弃

缺点:仅限制在navigateTo中,且请求基础库版本不低于2.7.3

应用示例:

 // A页面wx.navigateTo({url: 'B?id=1',events: {// 为指定事件增添一个监听器,获取被关上页面传递到以后页面的数据acceptDataFromOpenedPage: function(data) {console.log(data)},someEvent: function(data) {console.log(data)}...},success: function(res) {// 通过eventChannel向被关上页面传递数据res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })}})// B页面Page({onLoad: function(option){console.log(option.query)const eventChannel = this.getOpenerEventChannel()eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'});eventChannel.emit('someEvent', {data: 'test'});// 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传递到以后页面的数据eventChannel.on('acceptDataFromOpenerPage', function(data) {console.log(data)})}})

四、自界说EventBus
应用处景:A->B/B->A均可

好处:自界说实现,可扩年夜

缺点:对于wx停止扩年夜自界说变量,相同eventName能够会重复绑定监听事件

EventBus:参考这篇EventBus实现

应用示例:

 // app.jsconst EventBus = require('./utils/eventBus.js');App({onLaunch(){// 将eventBus初始到wx上wx['$uhomesBus'] = (function () {if (wx['$uhomesBus']) return wx['$uhomesBus'];return new EventBus();})();}}) // A页面Page({someActions(){wx.$uhomesBus.$on('$datas',(data)=>{console.log(data); // 11111})},}) // B页面Page({emitActions(){wx.$uhomesBus.$emit('$datas', '11111');},})

五、获取页面栈实例getCurrentPages
应用处景:首如果B->A

好处:小程序原生供应,解决逻辑基础都在B页面

缺点:需要增加结婚页面的响应规定,且路由栈至少有两个页面存在

应用示例:

 // A页面Page({someActions(datas){console.log(datas); // 11111},})// B页面Page({someActions(){const pages = getCurrentPages();if (pages.length 

六、globalDataproxy
临时未试验这种形式,情理上可行;

响应的情理可参考Vue3的数据要挟以及定阅照顾相联合。

你可能想看:

本文链接:https://addon.ciliseo.com/qian-tan-xiao-cheng-xu-kua-ye-mian-zhi-jian-tong-xin-de-si-lu-fang-shi.html

小程序浅谈思路页面通信方式程序示例场景缺点优点数据自定义路由逻辑
页面升级紧急升级访问通知页面布局怎么设置页面翻译软件页面设置页面布局页面时间怎样显示出来页面英文页面翻译页面颜色怎么设置页面缩小快捷键ctrl加什么页面翻译在线页面访问永久每天正常更新页面放大缩小快捷键页面升级紧急访问紧急跳转狼页面英文翻译成中文页面切换快捷键ctrl加什么页面翻译成中文页面横向纵向只调整一页页面切换快捷键页面设计页面翻译工具页面文件太小无法完成操作页面图片下载页面截图页面文件页面自动刷新页面长截图数据恢复大师数据蛙安卓恢复专家数据传输到新手机数据恢复大师免费版数据漫游是什么意思数据分析师证书怎么考数据港数据港股票数据恢复数据分析需要学哪些数据图表数据蛙数据恢复专家数据表数据恢复软件免费版数据库数据透视表的使用方法数据蛙数据透视表数据分析数据结构数据集数据蒸馏数据可视化数据标注数据中心程序程序员自学程序代码程序员程序员需要学哪些知识程序员需要什么学历程序的英文程序猿程序员客栈官网程序员是干什么的薪水如何程序员理发充卡24万程序员客栈程序流程图程序员哈利个人网程序员是做什么的程序编程软件程序文件程序正义程序英文程序员接单程序员接单平台程序员论坛自定义水印相机自定义表盘工具自定义换脸软件自定义铃声怎么删除自定义铃声怎么设置自定义键盘皮肤自定义转盘自定义表盘自定义壁纸自定义键盘自定义转盘在线使用自定义转盘模拟器在线使用自定义表情包在线制作自定义水印相机电脑版自定义英文自定义水印相机网页版自定义局域网联机mod自定义网址导航网页自定义英文自定义chatgpt自定义域名邮箱自定义汇率计算器自定义的英文自定义搜索自定义chrome自定义邮箱

网友评论

扫一扫二维码添加客服微信

关于我们建站招商建站服务