HarmonyOS 鸿蒙Next中页面间数据传递有哪些途径或方法?
HarmonyOS 鸿蒙Next中页面间数据传递有哪些途径或方法?
更多关于HarmonyOS 鸿蒙Next中页面间数据传递有哪些途径或方法?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HmRouter是开源组件,鸿蒙原生也提供了两个组件进行页面路由,传参,分别是Router、Navigation。
当前鸿蒙推荐使用Navigation进行页面路由。
在鸿蒙管网中,有相关指导文档
router路由传参Api:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-router-V5#导入模块
Navigation路由传参Api:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5#pushpath10
Api中有各种路由跳转时页面传参方式
可以使用HMRouter路由框架进行页面间的跳转和参数传递
1. 为需要跳转的页面添加[@HMRouter](/user/HMRouter)注解,并配置其中的pageUrl参数,例如此处配置为ProductContent。
[@HMRouter](/user/HMRouter)({ pageUrl: 'ProductContent' })
[@Component](/user/Component)
export struct ProductContent {
// ...
}
2. 在需要进行页面跳转的位置,使用HMRouterMgr提供的push/replace方法进行页面跳转,在参数中配置目标页面的pageUrl,param参数等
HMRouterMgr.push({
navigationId: "mainNavigationId",
pageUrl: 'ProductContent',
param: { a: 1, b: 2 },
animator: new CustomAnimator(),
}, {
onResult(popInfo: HMPopInfo) {
const pageName = popInfo.srcPageInfo.name;
const params = popInfo.result;
console.log(`page name is ${pageName}, params is ${JSON.stringify(params)}`);
}
})
3. 在跳转的目标页面使用HMRouterMgr.getCurrentParam()获取到传递的数据
[@Component](/user/Component)
export struct ProductContent {
// ...
[@State](/user/State) param: ParamsType | null = null;
aboutToAppear(): void {
this.param = HMRouterMgr.getCurrentParam() as ParamsType;
}
// …
}
两个UIAbility之间 数据传递的方法如下,推荐优先使用排序靠前的方法。
-
方法一:调用startAbility接口启动另外一个UIAbility时,通过wantInfo添加启动参数。也可通过startAbilityForResult接口,获取被调用方UIAbility在关闭时返回的信息
-
方法二:使用应用级别的状态管理AppStorage、PersistentStorage、Environment,实现应用级或者多个页面的状态数据共享。
-
方法三:同一个应用中UIAbility和UIAbility之间的数据传递,可以使用AppStorage/LocalStorage进行数据同步。
-
方法四:使用线程间通信工具Emitter、Worker进行通信。
-
方法五:使用进程间通信工具CES(公共事件服务)进行通信。
-
其他方法(系统应用):通过Call调用实现UIAbility交互。
参考链接
UIAbility组件间交互(设备内),管理应用拥有的状态概述,UIAbility组件与UI的数据同步,线程模型概述,进程间通信CES
https://developer.huawei.com/consumer/cn/forum/topic/0204141303961614256?fid=0109140870620153026
- AppStorage
- EventHub
- startAbility
- router
- Navigation
- 发布订阅(具体内容印象模糊)
startAbility
方法可以启动其他 Ability 或者同一应用内的其他页面(可以将其视为一种特殊的 Ability),在启动时可以通过 Want
对象来携带参数,然后在目标页面中获取并解析这些参数。注意区分UIAbility组件和UI,UIAbility组件不等于UI(页面),参考https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/uiability-intra-device-interaction-V13。看起来通过startAbility(),页面只能传递参数到(其他)UIAbility组件,而不是传到其他页面。
在HarmonyOS 鸿蒙Next中,页面间数据传递主要通过以下几种途径或方法:
-
全局状态管理:利用系统提供的全局状态管理工具(如DataAbility),将数据存储在全局变量中,各页面通过访问这些全局变量实现数据共享。
-
Intent机制:通过显式或隐式Intent携带数据,在启动目标页面时传递。Intent可以携带基本数据类型、对象以及序列化后的数据。
-
消息总线:利用系统提供的消息总线机制(如Event Bus),发布和订阅事件,实现页面间异步通信和数据传递。
-
Service通信:通过定义AIDL接口或DataAbility API,实现页面与Service之间的数据交换,再由Service将数据传递给其他页面。
-
跨进程通信:对于需要跨应用传递的数据,可利用系统提供的跨进程通信机制(如分布式数据库),实现数据的远程访问和共享。
-
URI共享:通过生成数据的URI,并在页面间传递该URI,接收方通过URI访问数据。
这些方法提供了丰富的页面间数据传递手段,根据具体需求选择合适的方式即可。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。