微信小程序实现页面间跨页面通信

wx-bus实现小程序跨页面通信

为什么要有wx-bus?

一个熟悉的业务流程:page A跳转到到page B,page B修改数据后,page A需要同步刷新。有三个解决方案:

  • 返回page A时重新请求数据。如果A是个列表,刷新会重新回到顶部,并且如果网络不好,也会影响用户体验。
  • 在page B获取到page A实例对象,在该对象上直接修改数据(getCurrentPages方法)。这样做会导致页面耦合。
//pageB.js
//...
var pages = getCurrentPages();
//获取到pageA实例  
var prevPage = pages[pages.length - 2];//当前页面的上一个页面

prevPage.setData({

 oldData: 'new data'

})
复制代码
  • 全局bus

实现wx-bus

创建一个bus对象缓存事件和事件到处理函数
let bus = {};
复制代码
添加一个事件
function on(key, func) {
 if(!bus[key]){
   bus[key] = [func];
 }else{
   bus[key].push(func)
 }
}
复制代码
触发一个事件
function emit(key, params) {
  if(!bus[key]) return;
  for(let v of bus[key]){
    v(params)
  }
}
复制代码
移除一个事件
function off(key) {
  bus[key] && delete bus[key];
}
复制代码

使用wx-bus

//pageA.js

//引入bus.js
const bus = requier('bus.js');
//...
//在onLoad中绑定'testEvent'事件
onLoad: function () {
 bus.on('testEvent',(params) => {
  //...
 })
},
//...
复制代码
//pageB.js

const bus = requier('bus.js');
//...
//触发'testEvent'事件
toEmitEvent: function () {
 let params = 'new data'
 bus.emit('testEvent', params)
},
//解绑'testEvent'事件
toOffEvent: function () {
 bus.off('testEvent')
},
//...
复制代码

详见 github.com/huanghaodon…

注意!如果on方法里的回调函数用到this,则回调必须为箭头函数

bus.on('test',() => {
 //用到this,必须为箭头函数
})
复制代码

bus.js 的完整源代码和Demo详见 github.com/huanghaodon…

转载于:https://juejin.im/post/5bf791daf265da612b133fa1

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值