重点:小程序中并没有广播监听机制!!!要我们手动去实现一个哦
应用场景:
有pageA pageB pageC 三个页面
pageA打开了pageB,pageB打开了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也行!