HarmonyOS page如何监听数据变化

page如何监听一个单例中的数据变化,page的struct不支持registerDelegate。目前的解决方案是给page一个object成员进行监听,是否有更合适的方案。aboutToAppear注册的监听,理论上是否需要在aboutToDisappear中移除?

export interface LoginDelegate {
  onLogin(): void

  onLogout(): void
}

export class LoginService {
  private static instance: LoginService;
  delegateArray: Array<LoginDelegate> = []

  registerDelegate(delegate: LoginDelegate): void {
    this.delegateArray.push(delegate)
  }

  // 后面是一些业务接口,比如登录、登出
  // 当登录状态发生变化时通过delegate发出
}

class LoginPageAgent implements LoginDelegate {
  @Track status: LoginStatus = LoginStatus.LoggedOut;

  onLogin(): void {
    this.status = LoginStatus.LoggedIn
  }

  onLogout(): void {
    this.status = LoginStatus.LoggedOut
  }
}

@Component
struct LoginPage {
  @State agent: LoginPageAgent = new LoginPageAgent()

  aboutToAppear(): void {
    LoginService.shared().registerDelegate(this.agent)
  }

  build() {
    Column({}) {
      if (this.agent.status == LoginStatus.LoggedIn) {
        Text(`已登录`)
      } else {
        this.loginInput()
      }
    }
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
HarmonyOS
2024-12-25 12:12:08
822浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
fox280

可以使用事件订阅实现监听数据变化,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-application-eventhub-V5

取消监听的位置随意,只要能在页面销毁之前取消就可以了。

分享
微博
QQ
微信
回复
2024-12-25 13:05:36


相关问题
HarmonyOS 装饰器数据变化监听
572浏览 • 1回复 待解决
HarmonyOS数据数据变化是否可以监听
1310浏览 • 1回复 待解决
HarmonyOS 如何监听系统主题变化
874浏览 • 1回复 待解决
HarmonyOS 如何监听组件自身尺寸变化
757浏览 • 1回复 待解决
HarmonyOS 如何监听某个变量是否变化
725浏览 • 1回复 待解决
鸿蒙如何监听键盘高度变化
322浏览 • 1回复 待解决
如何监听窗口大小的变化
3273浏览 • 1回复 待解决
如何监听window大小的变化
1275浏览 • 1回复 待解决
HarmonyOS 网络变化监听失效
774浏览 • 1回复 待解决
HarmonyOS onMemoryLevel监听内存变化
580浏览 • 1回复 待解决
HarmonyOS 如何监听折叠屏折叠状态变化
1009浏览 • 1回复 待解决
HarmonyOS 如何监听到音频焦点的变化
825浏览 • 1回复 待解决
如何监听数组内对象属性变化
3140浏览 • 1回复 待解决
HarmonyOS 音频设备变化监听
915浏览 • 1回复 待解决
HarmonyOS 监听所有page的生命周期
1267浏览 • 1回复 待解决
HarmonyOS 监听Page第一帧上屏
759浏览 • 1回复 待解决