游戏人日常 2019-07-01
小程序页面之间如何通信?
首先将通信的模型列举出来, 分为以下几种
利用onShow/onHide激活方法,通过localStorage传递数据
onShow() {
let newHello = wx.getStorageSync('__data');
if (newHello) {
this.setData({
helloMsg: newHello
});
// 清空上次通信数据
wx.clearStorageSync('__data');
}
}同localStorage一样,利用onShow/onHide激活方法,通过读写小程序globalData完成数据传递
let app = getApp();
onShow() {
let newHello = app.$$data.helloMsg;
if (newHello) {
this.setData({
helloMsg: newHello
});
// 清空上次通信数据
app.$$data.helloMsg = null;
}
}eventBus基本适用合任何JS可以运行的环境, 通过订阅一个事件,然后再发布事件的时间点收到消息
// 首先你得实现一个eventBus, 这里假设你已经实现了..
// Page A
onLoad() {
app.pubSub.on('hello', (msg) => {
this.setData({
helloMsg: 'hello :' + msg
});
});
},
// Page B
onLoad() {
app.pubSub.emit('hello', 'JS每日一题')
},缓存页面PageModel, 通信时,直接找到要通信页面的PageModel,进而可以访问通信页面PageModel所有的属性,方法
// 在app.js中add及get实现
this.$$cache = {}
add(pageModel) {
// 添加时以__route__做为key,方便在其它页面调用
let pagePath = this.__route__;
this.$$cache[pagePath] = pageModel;
}
get(pagePath) {
// 同时直接取走相应的pageModel
return this.$$cache[pagePath];
}
// Page A 在onLoad 时将本身(this)存放到GlobalData中
onLoad() {
app.pages.add(this);
},
// Page B
onLoad() {
// 拿到Page A所有属性及方法
console.log(app.pages.get('pages/a/b'))
},JS每日一题可以看成是一个语音答题社区
每天利用碎片时间采用60秒内的语音形式来完成当天的考题
群主在次日0点推送当天的参考答案