app.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. globalData: {
  14. // 定义全局请求队列
  15. requestQueue: [],
  16. // 是否正在进行登陆
  17. isLanding: false,
  18. // 购物车商品数量
  19. totalCartCount: 0,
  20. statusBarHeight: 0,
  21. navBarHeight: 0,
  22. },
  23. // 注册事件:只避免“同一实例重复注册同一回调”
  24. on(eventName, callback) {
  25. if (!this.eventPool[eventName]) this.eventPool[eventName] = [];
  26. // 只判断当前回调是否已存在,不影响其他实例的回调
  27. const isExist = this.eventPool[eventName].some(cb => cb === callback);
  28. if (!isExist) {
  29. this.eventPool[eventName].push(callback);
  30. }
  31. },
  32. // 触发事件:所有注册的回调都会执行(但同一时间只有1个实例活跃)
  33. emit(eventName, data) {
  34. const callbacks = this.eventPool[eventName] || [];
  35. // 调试用:查看当前注册的回调数(同一时间通常为1,切换页面时可能短暂为2)
  36. console.log(`事件${eventName}当前回调数:`, callbacks.length);
  37. callbacks.forEach(callback => callback(data));
  38. },
  39. // 精准移除:只删当前实例的回调,不影响其他实例
  40. off(eventName, callback) {
  41. const callbacks = this.eventPool[eventName] || [];
  42. this.eventPool[eventName] = callbacks.filter(cb => cb !== callback);
  43. }
  44. })