微信小程序页面中监听globalData数据变化

问题: 微信小程序app.ts中声明了id变量, 如何在pages/index.ts中监听id值变化了

  1. 在 app.ts 增加全局 id 变更订阅机制
csharp 复制代码
App({
	globalData: {
    id: '',
  },
  setId(id: string) {
    this.globalData.id = id
    const list = idListeners.slice()
    for (let i = 0; i < list.length; i++) {
      list[i](id)
    }
  },
  onIdChange(cb: (id: string) => void) {
    idListeners.push(cb)
  },
  offIdChange(cb: (id: string) => void) {
    const i = idListeners.indexOf(cb)
    if (i > -1) idListeners.splice(i, 1)
  }
})
  1. 在 index 页面注册监听并同步组件数据
csharp 复制代码
lifetimes: {
    attached() {
      const fn = (id: string) => {
        console.log('id change')
        this.setData({ id })
      }
      ;(this as any)._idListener = fn
      app.onIdChange(fn)
      this.setData({ id: app.globalData.id })
    },
    detached() {
      const fn = (this as any)._idListener
      if (fn) app.offIdChange(fn)
    }
  }

验证:

添加事件handleChangeId() { const id = Math.random() * 1000; app.setId(id.toString()) },

触发handleChangeId事件, 控制台此时就会打印console.log('id change')

相关推荐
andrsted13 小时前
练题簿免费刷题小程序:和学习搭子共用一份题库,一起刷题复习
学习·面试·微信小程序·小程序·学习方法·刷题
万岳科技程序员小金15 小时前
教育机构如何搭建在线教学平台?网校系统、小程序与APP开发指南
小程序·在线教育系统源码·教育平台搭建·教育app开发·教育软件开发·教育小程序开发
计算机毕设定制辅导-无忧学长16 小时前
《基于微信小程序的个人智能刷题助手的设计与实现》
java·spring boot·mysql·微信小程序·uniapp·个人智能刷题助手系统
百慕大三角16 小时前
为了在 Linux CI 里跑小程序 E2E,我把微信官方基础库搬进了浏览器:wxa-runner 开源实践
微信小程序·agent·测试
小小王app小程序开发16 小时前
淘宝扭蛋机小程序玩法开发分析
小程序
2501_9160088917 小时前
马甲包过审卡在哪?Ipa Guard 能做的和做不到的
android·小程序·https·uni-app·iphone·webview
Fxkj88818 小时前
佛山企业做小程序:模板定制与源码定制怎么选?
人工智能·小程序
青企通1 天前
电商小程序购物车与库存扣减:SKU 模型、合并规则与防超卖实践
小程序·apache
AI源码1 天前
家乡介绍小程序
小程序·notepad++
2501_915921431 天前
iOS应用耗电测试:使用Energy Log、Keymob和Instruments进行性能监控与能源消耗分析
android·ios·小程序·https·uni-app·iphone·webview