团购网站 设计方案,wordpress wp-signup.php,湖南建设人力资源湖南网站建设,你博客使用的WordPress吧【高心星出品】 文章目录 Ability与Page数据传递Page向Ability传递数据Ability向Page传递数据 Ability与Page数据传递
基于当前的应用模型#xff0c;可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。
使用EventHub进行数据通信#xff1a;在基类Context中提供…【高心星出品】 文章目录 Ability与Page数据传递Page向Ability传递数据Ability向Page传递数据 Ability与Page数据传递
基于当前的应用模型可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。
使用EventHub进行数据通信在基类Context中提供了EventHub对象可以通过发布订阅方式来实现事件的传递。在事件传递前订阅者需要先进行订阅当发布者发布事件时订阅者将接收到事件并进行相应处理。使用AppStorage/LocalStorage进行数据同步ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案可用于实现应用级别和UIAbility级别的数据同步。
Page向Ability传递数据
EventHub为UIAbility组件提供了事件机制使它们能够进行订阅、取消订阅和触发事件等数据通信能力。
在基类Context中提供了EventHub对象可用于在UIAbility组件实例内通信。使用EventHub实现UIAbility与UI之间的数据通信需要先获取EventHub对象本章节将以此为例进行说明。
下面案例实现页面点击按钮发送颜色给ability从而修改ability的窗口背景色。 EntryAbility代码
import { AbilityConstant, UIAbility, Want } from kit.AbilityKit;
import { hilog } from kit.PerformanceAnalysisKit;
import { window } from kit.ArkUI;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, testTag, %{public}s, Ability onCreate);// 注册event_01事件监听this.context.eventHub.on(event_01,(data:Recordstring,Object){// 获取页面传递的数据 设置窗口背景颜色this.context.windowStage.getMainWindowSync().setWindowBackgroundColor(data!.color as string)})}onDestroy(): void {//关闭监听this.context.eventHub.off(event_01)hilog.info(0x0000, testTag, %{public}s, Ability onDestroy);}onWindowStageCreate(windowStage: window.WindowStage): void {// Main window is created, set main page for this abilityhilog.info(0x0000, testTag, %{public}s, Ability onWindowStageCreate);windowStage.loadContent(pages/eventpage, (err) {if (err.code) {hilog.error(0x0000, testTag, Failed to load the content. Cause: %{public}s, JSON.stringify(err) ?? );return;}hilog.info(0x0000, testTag, Succeeded in loading the content.);});}onWindowStageDestroy(): void {// Main window is destroyed, release UI related resourceshilog.info(0x0000, testTag, %{public}s, Ability onWindowStageDestroy);}onForeground(): void {// Ability has brought to foregroundhilog.info(0x0000, testTag, %{public}s, Ability onForeground);}onBackground(): void {// Ability has back to backgroundhilog.info(0x0000, testTag, %{public}s, Ability onBackground);}
}eventpage页面代码
import { common } from kit.AbilityKit;Entry
Component
struct Eventpage {State message: string Hello World;private context:common.UIAbilityContextgetContext(this) as common.UIAbilityContextbuild() {Column(){Button(向EntryAbility发送数据更改背景颜色).width(60%).onClick((){// 提交数据this.context.eventHub.emit(event_01,{color:#ff0000})})}.width(100%).height(100%).justifyContent(FlexAlign.Center)}
}Ability向Page传递数据
ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案可用于实现应用级别和UIAbility级别的数据同步。使用这些方案可以方便地管理应用状态提高应用性能和用户体验。其中AppStorage是一个全局的状态管理器适用于多个UIAbility共享同一状态数据的情况而LocalStorage则是一个局部的状态管理器适用于单个UIAbility内部使用的状态数据。
下面一个案例在ability获取窗口可布局界面的宽度和高度窗口高度-通知栏高度 EntryAbility代码
import { AbilityConstant, UIAbility, Want } from kit.AbilityKit;
import { hilog } from kit.PerformanceAnalysisKit;
import { AppStorageV2, window } from kit.ArkUI;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, testTag, %{public}s, Ability onCreate);// 注册event_01事件监听this.context.eventHub.on(event_01,(data:Recordstring,Object){// 获取页面传递的数据 设置窗口背景颜色this.context.windowStage.getMainWindowSync().setWindowBackgroundColor(data!.color as string)})}onDestroy(): void {//关闭监听this.context.eventHub.off(event_01)hilog.info(0x0000, testTag, %{public}s, Ability onDestroy);}onWindowStageCreate(windowStage: window.WindowStage): void {// Main window is created, set main page for this abilityhilog.info(0x0000, testTag, %{public}s, Ability onWindowStageCreate);// 获取窗口可布局的宽度和高度let winwindowStage.getMainWindowSync()// 获得通知栏区域let notifybarwin.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRectlet widthwin.getWindowProperties().windowRect.widthlet heightwin.getWindowProperties().windowRect.height-notifybar.height// 保存到appstorage中AppStorage.setOrCreate(width, width);AppStorage.setOrCreate(height, height);windowStage.loadContent(pages/eventpage, (err) {if (err.code) {hilog.error(0x0000, testTag, Failed to load the content. Cause: %{public}s, JSON.stringify(err) ?? );return;}hilog.info(0x0000, testTag, Succeeded in loading the content.);});}onWindowStageDestroy(): void {// Main window is destroyed, release UI related resourceshilog.info(0x0000, testTag, %{public}s, Ability onWindowStageDestroy);}onForeground(): void {// Ability has brought to foregroundhilog.info(0x0000, testTag, %{public}s, Ability onForeground);}onBackground(): void {// Ability has back to backgroundhilog.info(0x0000, testTag, %{public}s, Ability onBackground);}
}eventpage页面代码
import { common } from kit.AbilityKit;Entry
Component
struct Eventpage {State message: string Hello World;// 获取ability传过来的宽度和高度 单位是pxStorageProp(width) wd: number 0StorageProp(height) ht: number 0private context: common.UIAbilityContext getContext(this) as common.UIAbilityContextbuild() {Column() {Button(向EntryAbility发送数据更改背景颜色).width(60%).onClick(() {// 提交数据this.context.eventHub.emit(event_01, { color: #ff0000 })})Column() {Text(宽度为 this.wd).width(100%).fontSize(20)Text(高度为 this.ht).width(100%).fontSize(20)}// 设置组件的宽和高.width(this.wd / 2 px).height(this.ht / 3 px).border({ width: 3, color: Color.Red, style: BorderStyle.Dashed }).justifyContent(FlexAlign.Center).margin(20)}.width(100%).height(100%).justifyContent(FlexAlign.Center)}
}
order({ width: 3, color: Color.Red, style: BorderStyle.Dashed }).justifyContent(FlexAlign.Center).margin(20)}.width(100%).height(100%).justifyContent(FlexAlign.Center)}
}