鸿蒙~UiAbility 和page,UiAbility和UiA

2024-01-01  本文已影响0人  胡修波

基于HarmonyOS的应用模型,可以通过以下两种方式来实现UIAbility组件与UI之间的数据同步。

EventHub 较简单,直接上代码

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    let eventHub = this.context.eventHub

    eventHub.on("test_event", (...data)=> {
        console.info(TAG, `data:${JSON.stringify(data)}`);
    })
  }
import common from '@ohos.app.ability.common'


const TAG = "huxiubo"
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  private  context = getContext(this) as common.UIAbilityContext
  private  MyNumber: number
  private  MyNString: string;

  eventHub() {
    this.context.eventHub.emit("test_event", 1, "huxiubo", "beijing")

    this.MyNString = globalThis.MyNString
    this.MyNumber = globalThis.MyNumber
    console.info(TAG, `MyNString, ${ this.MyNString}`);
    console.info(TAG, `MyNumber, ${ this.MyNumber}`);
  }

  build() {
    Row() {
      Column() {
        Text("enter Ability")
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{
            this.eventHub()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

使用globalThis进行数据同步-- page页面和另一个UIAbility接受数据一样

globalThis是ArkTS引擎实例内部的一个全局对象,引擎内部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis全局对象进行数据同步

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    let eventHub = this.context.eventHub
    globalThis.MyNumber = 100;
    globalThis.MyNString = "字符串测试";

  }

Page页面接受数据

import common from '@ohos.app.ability.common'


const TAG = "huxiubo"
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  private  MyNumber: number
  private  MyNString: string;


  aboutToAppear() {
    this.MyNString = globalThis.MyNString
    this.MyNumber = globalThis.MyNumber
    console.info(TAG, `${this.MyNString}`);
    console.info(TAG, `${this.MyNumber}`);
  }


  build() {
    Row() {
      Column() {
        Text("enter Ability")
          .fontSize(50)
          .fontWeight(FontWeight.Bold)

      }
      .width('100%')
    }
    .height('100%')
  }
}

UIAbility接受数据也Page一样

上一篇 下一篇

猜你喜欢

热点阅读