app.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //app.js
  2. var http = require("utils/http.js");
  3. App({
  4. onLaunch: function () {
  5. this.eventPool = {}; // 事件池:key=事件名,value=回调数组
  6. http.getToken();
  7. //自定义导航栏 获取设备顶部窗口的高度(不同设备窗口高度不一样,根据这个来设置自定义导航栏的高度)
  8. const windowInfo = wx.getWindowInfo()
  9. let custom = wx.getMenuButtonBoundingClientRect()
  10. this.globalData.statusBarHeight = windowInfo.statusBarHeight
  11. this.globalData.navBarHeight = custom.height + (custom.top - windowInfo.statusBarHeight) * 2
  12. // 默认店铺
  13. if(!wx.getStorageSync('shopInfo')){
  14. wx.setStorageSync('shopInfo',{shopName:'瑞果商链-“星闪豹”',shopId:1})
  15. }
  16. },
  17. globalData: {
  18. // 定义全局请求队列
  19. requestQueue: [],
  20. // 是否正在进行登陆
  21. isLanding: false,
  22. // 购物车商品数量
  23. totalCartCount: 0,
  24. statusBarHeight: 0,
  25. navBarHeight: 0,
  26. },
  27. // 注册事件:只避免“同一实例重复注册同一回调”
  28. on(eventName, callback) {
  29. if (!this.eventPool[eventName]) this.eventPool[eventName] = [];
  30. // 只判断当前回调是否已存在,不影响其他实例的回调
  31. const isExist = this.eventPool[eventName].some(cb => cb === callback);
  32. if (!isExist) {
  33. this.eventPool[eventName].push(callback);
  34. }
  35. },
  36. // 触发事件:所有注册的回调都会执行(但同一时间只有1个实例活跃)
  37. emit(eventName, data) {
  38. const callbacks = this.eventPool[eventName] || [];
  39. // 调试用:查看当前注册的回调数(同一时间通常为1,切换页面时可能短暂为2)
  40. console.log(`事件${eventName}当前回调数:`, callbacks.length);
  41. callbacks.forEach(callback => callback(data));
  42. },
  43. // 精准移除:只删当前实例的回调,不影响其他实例
  44. off(eventName, callback) {
  45. const callbacks = this.eventPool[eventName] || [];
  46. this.eventPool[eventName] = callbacks.filter(cb => cb !== callback);
  47. }
  48. })