美文网首页
鸿蒙~UiAbility 和page,UiAbility和UiA

鸿蒙~UiAbility 和page,UiAbility和UiA

作者: 胡修波 | 来源:发表于2024-01-01 14:50 被阅读0次

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

  • EventHub:基于发布订阅模式来实现,事件需要先订阅后发布,订阅者收到消息后进行处理。

  • globalThis:ArkTS引擎实例内部的一个全局对象,在ArkTS引擎实例内部都能访问。

EventHub 较简单,直接上代码

  • 在UIAbility中订阅
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)}`);
    })
  }
  • 2、在UI界面中通过eventHub.emit()方法触发该事件,在触发事件的同时,根据需要传入参数信息。
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一样

相关文章

  • man page和info page

    使用linux时,难免遇到想不起来或者记不全等情况的指令,BD一下当然是个好方法,但是linux内置的man和in...

  • 鸿蒙如何才能“成功”

    1、鸿蒙为何物? 鸿蒙包括手机鸿蒙和万物鸿蒙,此文讨论的鸿蒙重点是基于万物互联的鸿蒙,而不仅仅是手机鸿蒙。也只有在...

  • 蓝牙page和page scan过程

    本着提高模块的蓝牙连接速度去研究page和page scan过程。slave:首先slave需要处于page sc...

  • Java面试题之JavaWeb

    1.Java Server Page和Servlet的联系和区别? java server page 简称jsp,...

  • 2019-08-10

    鸿蒙系统 - Big Dream 视频地址 鸿蒙 - 基于微内核的全场景分布式OS 总而言之,鸿蒙OS功能强大,和...

  • elementui分页补充

    使用@size-change和@current-change方法时,current-page和page-size要...

  • Github API v3 分页问题

    分页主要是在url后加page和per_page参数。格式是?page=页数&per_page=每页包含数量。如:...

  • Unbounce和Instapage的替代软件有哪些?试试 Cl

    Unbounce 和 Instapage都是知名的Landing page工具。 什么是landing page?...

  • ASP.NET中Page_Init()和page_load()区

    Page_Init()和page_load()事件 Page_Init()事件用法范例Init()事件主要用来设置...

  • 2.8 django分页

    Paginator和Page类: Paginator和Page类都是用来做分页的。他们在Django中的路径为dj...

网友评论

      本文标题:鸿蒙~UiAbility 和page,UiAbility和UiA

      本文链接:https://www.haomeiwen.com/subject/evyundtx.html