鸿蒙全栈开发-一文读懂鸿蒙同模块不同模块下的UIAbility跳转详解

本文主要是介绍鸿蒙全栈开发-一文读懂鸿蒙同模块不同模块下的UIAbility跳转详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

根据第三方机构Counterpoint数据,截至2023年三季度末,HarmonyOS在中国智能手机操作系统的市场份额已经提升至13%。短短四年的时间,HarmonyOS就成长为仅次于安卓、苹果iOS的全球第三大操作系统。
因此,对于鸿蒙生态建设而言,2024年可谓至关重要,而生态建设的前提,就是要有足够的开发人才。与之对应的,今年春招市场上与鸿蒙相关岗位和人才旺盛的热度,一方面反应了鸿蒙生态的逐渐壮大,另一方面也让人们对鸿蒙下一阶段的发展更具信心。

对于想要换个赛道的程序员们现在可以抓紧时间学起来了哦。

今天来跟大家聊一下鸿蒙同模块不同模块下的UIAbility跳转

●UIAbility组件作为系统调度的核心单元,为应用提供了用于绘制界面的窗口。
●在单个UIAbility组件内,可以利用多个页面完成一个功能模块的构建。
●每个UIAbility组件实例都与任务列表中的一个任务相对应。
●在项目开发中,为了分解多个任务,我们可以通过创建多个Ability来实现任务的细分。
在这里插入图片描述

同模块下UIAbility跳转

在同一个模块下,创建Ability,如下图所示:
在这里插入图片描述
在这里插入图片描述

我们展示一下从EntryAbility的A页面跳转到TwoAbility的B页面的过程。
注意:一定要使用模拟器进行跳转
在这里插入图片描述

EntryAbility的A页面代码

import common from '@ohos.app.ability.common'
import Want from '@ohos.app.ability.Want'
@Entry
@Component
struct APage {@State message: string = 'EntryAbility----------A页面'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button('跳转到TwoAbility的B页面').onClick(()=>{const context = getContext(this) as common.UIAbilityContextconst want:Want = {"deviceId":'',//空代表相同设备跳转"bundleName":"com.example.myapplicationproject",//包名---->app.json5中查找"abilityName":"TwoAbility",//Ability名,从module.json5中查找"moduleName":"entry",//模块名,非必写}context.startAbility(want)})}.width('100%')}.height('100%')}
}

在这里插入图片描述

TwoAbility的B页面代码

import router from '@ohos.router'
@Entry
@Component
struct BPage {@State message: string = 'twoAbility----------B页面'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button('返回到EntryAbility的A页面').onClick(()=>{// 因为是同个模块,可以直接back返回router.back()})}.width('100%')}.height('100%')}
}

在这里插入图片描述

因为是同个模块的跳转,所以直接用router.back即可返回。

不同模块下UIAbility跳转

新建一个模块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建完成,我的项目下就有两个模块,一个是entry,一个是TwoAbility
在这里插入图片描述

● 现在有一个功能,需要由entry模块的differentModuleA页面携带当前时间跳转到TwoAbility模块的differentModuleB页面,并在B页面接收A页面传过来的时间。

注意:不同的模块之间进行跳转的时候,需要在模拟器中进行一项配置,掉起两个模块

在这里插入图片描述
在这里插入图片描述

differentModuleA跳转代码详解

const context = getContext(this) as common.UIAbilityContext
const want:Want={"deviceId":'',//空代表相同设备跳转"bundleName":"com.example.myapplicationproject",//包名---->app.json5中查找"abilityName":"TwoApplicationAbility",//Ability名,从module.json5中查找。跳转页面的ability名,建议都从moudule.json5中复制,防止出错。"moduleName":"TwoApplication",//模块名,跳转页面的模块名"parameters":{//传递的参数id:Date.now()}}context.startAbility(want)

differentModuleB页面接收代码需要在Ability文件中接收,即本文的TwoApplicationAbility.ets中。在此文件中有一个onCreate()中,有一个want,用来接收参数。

// 定义类型
type AbilityParams=Record<string,number>
onCreate(want, launchParam) {// 接收从entry模块的DifferentA页面传递过来的参数const params = want.parameters as AbilityParams// 存储AppStorage.SetOrCreate<number>("id",params.id)hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}

differentModuleA页面完整代码

import common from '@ohos.app.ability.common'
import Want from '@ohos.app.ability.Want'
@Entry
@Component
struct DifferentModuleA {@State message: string = 'Entry模块---DifferentModuleA页面'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button('跳转到TwoAbility的DifferentModuleB页面').onClick(()=>{const context = getContext(this) as common.UIAbilityContextconst want:Want={"deviceId":'',//空代表相同设备跳转"bundleName":"com.example.myapplicationproject",//包名---->app.json5中查找"abilityName":"TwoApplicationAbility",//Ability名,从module.json5中查找。跳转页面的ability名,建议都从moudule.json5中复制,防止出错。"moduleName":"TwoApplication",//模块名,跳转页面的模块名"parameters":{id:Date.now()}}context.startAbility(want)})}.width('100%')}.height('100%')}
}

differentModuleB页面完整代码

@Entry
@Component
struct DifferentModuleB {@State message: string = 'TwoAbility模块的---DifferentModuleB页面'@StorageLink("id")numId:number=0build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Text(`接收到的参数${this.numId}`)}.width('100%')}.height('100%')}
}

[一定要在ability.ets中更改入口文件,不然可能跳转不到你想去的页面]

在这里插入图片描述
在这里插入图片描述

● differentModuleB返回到differentModuleA的时候传递给differentModuleA参数

differentModuleB跳转代码

('返回到DirrerentA页面').onClick(()=>{const context = getContext(this) as common.UIAbilityContextcontext.terminateSelfWithResult({resultCode:1,want:{"deviceId":'',"bundleName":'com.example.myapplicationproject',//包名"abilityName":"EntryAbility",//A模块的ability名"moduleName":"entry",//A模块的模块名"parameters":{// 返回的参数"result":"ok"}}})
})

注意:differentModuleA页面接收参数的时候不用在ability.ets中接收在AppStorage的形式存储到全局。differentModuleA页面跳转的时候有一个方法直接可以用来接收返回的参数。代码如下:

Button('跳转到TwoAbility的DifferentModuleB页面').onClick(async ()=>{const context = getContext(this) as common.UIAbilityContextconst want:Want={"deviceId":'',"bundleName":"com.example.myapplicationproject","abilityName":"TwoApplicationAbility","moduleName":"TwoApplication","parameters":{id:Date.now()}}//发起一个模块,不会接收结果参数// context.startAbility(want)//发起一个模块,接收结果参数const result = await context.startAbilityForResult(want);// 是异步的const params = result.want?.parameters as resultClassif(params?.result){AlertDialog.show({message:'成功'})}else{AlertDialog.show({message:'失败'})}
})

在这里插入图片描述

写在最后

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。随着鸿蒙的不断发展以及国家的大力支持,未来鸿蒙职位肯定会迎来一个大的爆发,只有积极应对变化,不断学习和提升自己,我们才能在这个变革的时代中立于不败之地。在这里插入图片描述

这篇关于鸿蒙全栈开发-一文读懂鸿蒙同模块不同模块下的UIAbility跳转详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038112

相关文章

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的