【愚公系列】2022 年 11 月 微信小程序 - 页面间通信
前言
在小程序中如果一个页面由另一个页面通过 wx.navigateTo 打开,这两个页面间将建立一条数据通道:被打开的页面可以通过 this.getOpenerEventChannel() 方法来获得一个 EventChannel 对象;wx.navigateTo 的 success 回调中也包含一个 EventChannel 对象。这两个 EventChannel 对象间可以使用 emit 和 on 方法相互发送、监听事件。
1.页面通信分类
按页面层级(或展示路径)可以分为:
兄弟页面间通信。如多 Tab 页面间通信,PageA,PageB 之间通信
父路径页面向子路径页面通信,如 PageA 向 PageC 通信
子路径页面向父路径页面通信,如 PageC 向 PageA 通信
按通信时激活对方方法时机,又可以分为:
延迟激活,即我在 PageC 做完操作,等返回到 PageA 再激活 PageA 的方法调用
立即激活,即我在 PageC 做完操作,在 PageC 激活 PageA 的方法调用
一、GET 类通信
二、POST 类通信
三、localStorage 通信
注意点:如果完成通信后,没有即时清除通信数据,可能会出现问题。另外因为依赖 localStorage,而 localStorage 可能出现读写失败,从面造成通信失败
四、全局参数通信
注意点:要注意 globalData 污染
五、发布订阅中间件
注意点:重复绑定的问题
六、oba 开源库
注意点:重复 watch 的问题
七、hack 方法
每个页面有 onLoad 方法,我们在这个事件中,把 this(即些页面 PageModel)缓存即可,缓存时用页面路径作 key,方便查找。那么页面路径怎么获取呢,答案就是 page__route__这个属性
总结
GET 类通信
POST 类通信
localStorage 通信
全局参数通信
发布订阅中间件
oba 开源库
hack 方法
版权声明: 本文为 InfoQ 作者【愚公搬代码】的原创文章。
原文链接:【http://xie.infoq.cn/article/06770f546eaf160a6c8a7bb2e】。文章转载请联系作者。
评论