20190227

小程序页面之间如何通信?

首先将通信的模型列举出来, 分为以下几种

  • 兄弟页面间通信
  • 父路径页面向子路径页面通信
  • 子路径页面向父路径页面通信
通信的方式
  • localStorage 本地存储
  • globalData 全局对象
  • eventBus 发布订阅
  • PageModel 缓存整个pageModel至globalData
LocalStorage

利用onShow/onHide激活方法,通过localStorage传递数据

  onShow() {let newHello = wx.getStorageSync('__data');if (newHello) {this.setData({helloMsg: newHello});// 清空上次通信数据wx.clearStorageSync('__data');}}
GlobalData

同localStorage一样,利用onShow/onHide激活方法,通过读写小程序globalData完成数据传递

  let app = getApp();onShow() {let newHello = app.$$data.helloMsg;if (newHello) {this.setData({helloMsg: newHello});// 清空上次通信数据app.$$data.helloMsg = null;}}
EventBus

eventBus基本适用合任何JS可以运行的环境, 通过订阅一个事件,然后再发布事件的时间点收到消息

// 首先你得实现一个eventBus, 这里假设你已经实现了..// Page AonLoad() {app.pubSub.on('hello', (msg) => {this.setData({helloMsg: 'hello :' + msg});});},// Page BonLoad() {app.pubSub.emit('hello', 'JS每日一题')},
PageModel

缓存页面PageModel, 通信时,直接找到要通信页面的PageModel,进而可以访问通信页面PageModel所有的属性,方法

// 在app.js中add及get实现this.$$cache = {}add(pageModel) {// 添加时以__route__做为key,方便在其它页面调用let pagePath = this.__route__;this.$$cache[pagePath] = pageModel;}get(pagePath) {// 同时直接取走相应的pageModelreturn this.$$cache[pagePath];}// Page A 在onLoad 时将本身(this)存放到GlobalData中onLoad() {app.pages.add(this);},// Page BonLoad() {// 拿到Page A所有属性及方法console.log(app.pages.get('pages/a/b')) },

总结

  • localstorage 同步会阻塞进程,异步可能会错过最佳取值时机
  • globalData 直接操作内存,比localstorage更快,注意全局变量污染
  • eventBus 方便灵活,推荐使用,注意解绑及重复绑定
  • PageModel 思路很棒,但globalDatac存放的pageModel过多时内存会不会爆不知道~_~

关于JS每日一题

JS每日一题可以看成是一个语音答题社区
每天利用碎片时间采用60秒内的语音形式来完成当天的考题
群主在次日0点推送当天的参考答案

  • 注 绝不仅限于完成当天任务,更多是查漏补缺,学习群内其它同学优秀的答题思路

点击加入答题

JS每日一题: 小程序页面之间如何通信?相关推荐

  1. 小程序引用其他页面js_来聊聊小程序页面之间如何通信

    小程序页面之间如何通信? 首先将通信的模型列举出来, 分为以下几种 兄弟页面间通信 父路径页面向子路径页面通信 子路径页面向父路径页面通信 通信的方式 localStorage 本地存储 global ...

  2. 微信小程序——页面之间传递值

    微信小程序--页面之间传递值 小程序页面传值的方式: 1.正向传值:上一页面 -->  下一页面 url传值 本地储存 全局的app对象 2.反向传值:下一页面 -->  上一页面 本地储 ...

  3. 小程序页面之间数据传递的五种方法

    小程序页面之间数据传递的五种方法 目录 小程序页面之间数据传递的五种方法 **使用 `wx.navigateTo()` 时,在 url 中拼接,这种方法适用于数据量少的情况** **使用 `wx.na ...

  4. 小程序页面之间跳转的方式

    先导 我们Activity和Fragment都有栈的概念在里面,微信小程序页面也有栈的概念在里面.微信小程序页面跳转有四种方式: wx.navigateTo(OBJECT) wx.redirectTo ...

  5. 小程序页面之间数据传递的四种方法

    近期再使用小程序开发的时候遇到小程序页面和页面之间的数据传递问题.总结一下大致有以下几种方式实现页面数据传递. 最常见的就是路由传参,使用场景主要是页面汇总的少量数据的传递.以下都以Taro+vue示 ...

  6. 微信小程序页面之间数据传递

    微信小程序跳转界面传递数据,要传递的数据拼接在url 后面实现 下面看一个简单的demo 传递数据 要传递界面 wxml <!--index.wxml--> <view class= ...

  7. 微信小程序页面之间传递数据

    使用路由传递数据: 跳转时将数据使用 ? 拼接在 URL 后面:在另一个页面的 onLoad() 方法的参数中即可获取到传递的参数. 微信小程序对路由传参的大小有限制. 接收数据的页面获取到的都是字符 ...

  8. 小程序页面之间的通讯利器 - nsevent

    这个模块主要的原因是用在微信开发时候监听两个页面之间的状态交互 比如 pageA 和 pageB 两个页面, pageA 页面有收藏项 pageB 也有同样的收藏项,监听同一个事件 // 收藏事件改变 ...

  9. 小程序页面之间的跳转方法

    1. 利用小程序提供的 API 跳转: 1.navigateTo// 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面. // 注意:调用 navigateTo ...

最新文章

  1. Google Test(GTest)使用方法和源码解析——自动调度机制分析
  2. Apache Kafka-初体验Kafka(04)-Java客户端操作Kafka
  3. 数据爆炸时代,浪潮K1 Power释放新算能
  4. oracle插补缺失日期,Oracle连接 ORA-28001: 口令已经失效解决方法
  5. suse12安装详解
  6. C# 3.0 新特性
  7. 09Linux虚拟机快照
  8. 43岁的微软大重组:肢解Windows,拥抱AI,20年功臣离职
  9. 做.NET开发解决Extjs4智能感知
  10. hdu 4599 Dice
  11. Iocomp ActiveX/VCL Ultra Pack Crack
  12. KVYcam(网络摄像头软件) v13.0.3.0
  13. ASP.NET 实习工作总结(前言)
  14. BOM 定时器+回调函数
  15. matlab中nnt,Matlab语言的Neural Network Toolbox 及其在同步中
  16. 微型计算机97 占有率,第1章++微型计算机基础.ppt
  17. Flutter项目——静态页面布局4详情页
  18. 力扣-股票的资本损益
  19. 批量合并excel工作表
  20. oracle-win10-11g-R2 安装步骤

热门文章

  1. 从Android的结构看HarmonyOS
  2. Android Jetpack组件之 Paging使用-源码
  3. 第十、十一周项目二-存储班长信息的学生类
  4. Android studio官网资料
  5. java package作用_java import、package作用与用法
  6. mysql timdir_MySQL备份之mysqlhotcopy与注意事项
  7. android6.0进入Material Design时代
  8. hibernate之Configuration对象
  9. dubbo 源码编译记录
  10. Python Numpy包安装