| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- //app.js
- var http = require("utils/http.js");
- App({
- onLaunch: function () {
- this.eventPool = {}; // 事件池:key=事件名,value=回调数组
- http.getToken();
- //自定义导航栏 获取设备顶部窗口的高度(不同设备窗口高度不一样,根据这个来设置自定义导航栏的高度)
- const windowInfo = wx.getWindowInfo()
- let custom = wx.getMenuButtonBoundingClientRect()
- this.globalData.statusBarHeight = windowInfo.statusBarHeight
- this.globalData.navBarHeight = custom.height + (custom.top - windowInfo.statusBarHeight) * 2
- },
- globalData: {
- // 定义全局请求队列
- requestQueue: [],
- // 是否正在进行登陆
- isLanding: false,
- // 购物车商品数量
- totalCartCount: 0,
- statusBarHeight: 0,
- navBarHeight: 0,
- },
- // 注册事件:只避免“同一实例重复注册同一回调”
- on(eventName, callback) {
- if (!this.eventPool[eventName]) this.eventPool[eventName] = [];
- // 只判断当前回调是否已存在,不影响其他实例的回调
- const isExist = this.eventPool[eventName].some(cb => cb === callback);
- if (!isExist) {
- this.eventPool[eventName].push(callback);
- }
- },
- // 触发事件:所有注册的回调都会执行(但同一时间只有1个实例活跃)
- emit(eventName, data) {
- const callbacks = this.eventPool[eventName] || [];
- // 调试用:查看当前注册的回调数(同一时间通常为1,切换页面时可能短暂为2)
- console.log(`事件${eventName}当前回调数:`, callbacks.length);
- callbacks.forEach(callback => callback(data));
- },
- // 精准移除:只删当前实例的回调,不影响其他实例
- off(eventName, callback) {
- const callbacks = this.eventPool[eventName] || [];
- this.eventPool[eventName] = callbacks.filter(cb => cb !== callback);
- }
- })
|