let isLogin = false;
|
|
// 发布订阅模式
|
class Publisher {
|
constructor() {
|
this.map = new Map();
|
}
|
on(key, callback) {
|
let arr = this.map.get(key) || [];
|
arr.push(callback);
|
this.map.set(key, arr);
|
}
|
emit(key, data = {}) {
|
if (this.map.has(key)) {
|
this.map.get(key).forEach((item) => {
|
item.call(this, data);
|
});
|
}
|
}
|
}
|
|
let publisher = new Publisher();
|
|
// 页面扩展
|
const oldPage = Page;
|
Page = function (pageParams) {
|
const { onLoad, onShow, onReady } = pageParams;
|
|
pageParams.onLoad = function (params) {
|
// 判断是否登陆
|
if (isLogin) {
|
onLoad && onLoad.call(this, params);
|
} else {
|
publisher.on("login", () => {
|
isLogin = true;
|
onLoad && onLoad.call(this, params);
|
});
|
}
|
};
|
|
pageParams.onShow = function () {
|
// 判断是否登陆
|
if (isLogin) {
|
onShow && onShow.call(this);
|
} else {
|
publisher.on("login", () => {
|
onShow && onShow.call(this);
|
});
|
}
|
};
|
|
pageParams.onReady = function () {
|
// 判断是否登陆
|
if (isLogin) {
|
onReady && onReady.call(this);
|
} else {
|
publisher.on("login", () => {
|
onReady && onReady.call(this);
|
});
|
}
|
};
|
return oldPage(pageParams);
|
};
|
|
module.exports = {
|
publisher,
|
};
|