博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小程序不同页面之间通讯的解决方案
阅读量:5983 次
发布时间:2019-06-20

本文共 1566 字,大约阅读时间需要 5 分钟。

小程序做开发的时候难免需要不同页面之间的通讯,比如首页打开新的页面搜索获取结果返回到首页,不同tab页面之间的数据交互等等。于是做了以下总结

当前页面打开新的页面

打开新的页面可以通过 navigator 组件来实现,通过url传参来实现,例如

搜索
复制代码

在新的页面 onLoad 事件可以拿到传过来的参数 options

onLoad: function(options) {  console.log(options.id);}复制代码

新的页面回传数据到当前页面

在当前页面定义一个方法

searchRet(results) {  console.log(results);}复制代码

在搜索页面获取到的结果,由于小程序页面是通过栈来存储的,所以可以通过 getCurrentPages() 获取获取当前页面栈的实例,第一个元素为首页,最后一个元素为当前页面

let pages = getCurrentPages();let homePage = pages[pages.length - 2];if (homePage) {  homePage.searchRet(results);}复制代码

生命周期和storage

通过 wx.setStorageSync() 方法可以在本地存储数据,在 page 的 onShow 回调里获取 storage 的值后做相应的处理,例如

// index.jswx.setStorageSync('refresh', true);// mycenter.jsif (wx.getStorageSync('refresh')) {  // 做更新操作  wx.removeStorageSync('refresh');}复制代码

storage 也可以用 globalData 来代替,原理一样,这里不做展开,两种办法都可行,但是就是太笨了,场景复杂起来没法搞 ?

事件监听

个人感觉通过全局的事件监听来处理是一个很好的方法,在 Page 页面监听事件,通过在另一个 Page 触发相应的事件,就可以做对应的处理,实时高效,于是我封装了一个可以声明命名空间的事件监听器 ,可以通过 npm 安装到小程序()

nsevent的用法也很简单,只需要在监听的页面通过 nsevent.on() 来实现监听,建议添加第三个参数命名空间,这样可以在 onUnload 回调解绑相应的事件,举个以下例子

// select.jsconst nsevent = require('nsevent');Page({  onLoad() {    nsevent.on('add', (num) => {      console.log(`select.js接收到add事件,参数为${num}`)    }, 'select.js')  },  addnumber() {    nsevent.emit('add', 1);  },  onUnload() {    console.log('select.js移除add事件')    nsevent.off('add', 'select.js');  }});复制代码

emit方法不仅可以触发普通的事件,也可以触发指定命名空间的事件,比如 pageA 和 pageB,pageC 都监听了 locationChange 事件,在 pageC 页面想单独触发 pageA 的回调,可以这样写 ?

nsevent.emit('locationChange', { ns: ['pageA'] });复制代码

不知道这工具对大家有没有用,如有有用请给个星星吧,或者有其他好的意见可以讨论一下。

首发于个人博客地址: 

转载地址:http://klgox.baihongyu.com/

你可能感兴趣的文章
pygtk笔记--2.1:布局容器,VBox、Hbox、Alignment
查看>>
dtree.js树的使用
查看>>
Springboot2.1.3 + redis 实现 cache序列化乱码问题
查看>>
线程什么时候需要同步,什么时候不需要同步?
查看>>
Struts2 自定义拦截器(方法拦截器)
查看>>
Linux服务器的那些性能参数指标
查看>>
BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
查看>>
c++ 11开始语言本身和标准库支持并发编程
查看>>
.NET Core 之 MSBuild 介绍
查看>>
iOS:即时通讯之<了解篇 SocKet>
查看>>
《JavaScript高级程序设计》读书笔记(十):本地对象Date
查看>>
linux中fork()函数详解
查看>>
从1G到5G,46年屏幕变迁下,富士康、苹果、三星、华为的浴火重生路 ...
查看>>
用flash测试你的ircd
查看>>
白话红黑树系列之二——红黑树的构建
查看>>
客户的一张表中出现重复数据,而该列由唯一键约束,重复值如何产生的呢?...
查看>>
MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能
查看>>
OnePlus安装Kali-NetHunter
查看>>
JavaScript:Array 对象
查看>>
PDFCreator:一款免费,开源的PDF(Tiff,pcx,png,jpeg,bmp,PS,EPS)打印机(VB,GPL),并提供了COM接口,方便使用各种编程语言调用...
查看>>