小程序中的 广播/监听 机制(跨页面通信)

重点:小程序中并没有广播监听机制!!!要我们手动去实现一个哦

应用场景:
pageA pageB pageC 三个页面
pageA打开了pageBpageB打开了pageC,pageC页面完成了一些动作,此时想 即时 通知pageA去请求新的数据,已防止用户返回到pageA时再请求数据导致用户体验不好!

但是上面也说过了,小程序内置方法里并没有这个,就需要我们手动封装一个了。

在这里插入图片描述

先来写调度中心 event.js:(监听 on;广播 emit;销毁 remove)
// /utils/event.js
let events = {};

function on(name, self, callback) {
  let tuple = [self, callback];
  let callbacks = events[name];
  if (Array.isArray(callbacks)) {
    callbacks.push(tuple);
  }
  else {
    events[name] = [tuple];
  }
}

function remove(name, self) {
  let callbacks = events[name];
  if (Array.isArray(callbacks)) {
    events[name] = callbacks.filter((tuple) => {
      return tuple[0] != self;
    })
  }
}

function emit(name, data) {
  let callbacks = events[name];
  if (Array.isArray(callbacks)) {
    callbacks.map((tuple) => {
      let self = tuple[0];
      let callback = tuple[1];
      callback.call(self, data);
    })
  }
}

exports.on = on;
exports.remove = remove;
exports.emit = emit;

全局注入(app.js)
import event from './event.js';
wx.event = event;

以上我们调度中心就写好了

监听
onShow(){
	wx.event.on('tabbarList', this, this.init);
},
init(){
	console.log('do you want')
}
广播
let data = '我是广播者'
wx.event.emit('tabbarList') 或者
wx.event.emit('tabbarList',data)

总结:找个全局对象,将调度中心的几个方法找同一个上级。可以是wx也可以是app.globalData甚至是localStorage也行!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值