文章目录
路由与Ability简述
一、路由
1.创建页面
-
直接创建page页面
-
新建普通ets文件,配置成页面
新建普通页面 pages/DetailPage.ets
文件位置在main_pages.json
在如下代码添加即可
{ "src": [ "pages/Index", "pages/EditPage" ] }
2.页面跳转和后退
跳转到的页面必须被注册
2.1.导航容器组件跳转
Navigator(value?:{target: string,type?:avigationType})
使用Navigator时,目标参数是必须的,type可选
type有三个种类:
NavigationType.push //覆盖,可返回原页面,默认方式
NavigationType.Replace //替换,不可返回原页面
NavigationType.Back //导航以返回方式跳转,如果页面不存在则不跳转
使用Navigator时,内部只能包括一个根子组件,但是可以通过这个组件是容器组件的方式写更多组件,类似build。
Navigator({ target: 'pages/Index'})
{
Text('点我跳转')
.width(200)
.height(200)
.fontSize(50)
}
2.2.路由方式跳转
路由方式页面跳转通过系统提供的API实现页面跳转
当使用router时顶部自动出现
import { router } from '@kit.ArkUI';
跳转代码示例:
Button('跳转').onClick(() => {
router.pushUrl({
url: 'pages/Index'
})
})
跳转方式:
import router from '@ohos.router';
// 1.调用方法 - 普通跳转(可以返回)
router.pushUrl({
url:'页面地址'
})
// 2.调用方法 - 替换跳转(无法返回)
router.replaceUrl({
url:'页面地址'
})
// 3.调用方法 - 返回()
router.back()
2.3.页面传递参数
上述两种方法都可以在页面跳转时传递参数,以实现页面间的参数传递。
导航组件跳转时通过属性方法params设置参数。
@Component
struct Index {
@State count: number = 0
build() {
Navigator({ target:'pages/other'}){
...
}
.params({count: this.count})
}
}
路由接口跳转页面时,可以为跳转方法传递params参数
router.push({
url: 'pages/other',
params: {count: this.count}
})
传递的数据需要被新的页面接收
router.getParams()['count']
3.页面栈
页面栈是存储程序运行时特免的一种数据结构。顾名思义,遵循栈的原则,先进后出。最大容量为32个页面。
//获取页面栈长度
router.getLength()
//清空页面栈
router.clear()
4.路由模式
路由提供了两种不同的跳转模式
-
Standard:无论之前是否添加过,一直添加到页面栈【默认常用】
-
Single:如果目标页面已存在,会将已有的最近同url页面移到栈顶【看情况使用】
router.pushUrl(options, mode)
5.组件和页面生命周期
组件 和 页面 在创建、显示、销毁的这一整个过程中,会自动执行 一系列的【生命周期钩子】。
其实就是一系列的【函数】,让开发者有机会在特定的阶段运行自己的代码。
-
aboutToAppear:创建组件实例后执行,可以修改状态变量
-
aboutToDisappear:组件实例销毁前执行,不允许修改状态变量
-
onPageShow:页面每次显示触发(路由过程、应用进入前后台)
-
onPageHide:页面每次隐藏触发(路由过程、应用进入前后台)
-
onBackPress:点击返回触发(return true 阻止返回键默认返回效果)
仅@Entry修饰的页面组件生效
二、Ability
目前主推模型为Stage模型。 本处只会对FA做基本阐述,主要记录Stage模型。建议FA模型只做了解,着重学习Stage模型。
- FA模型
- Stage模型
1.Ability概述
FA模型中Ability分为
- PageAbility,页面能力
- ServiceAbility,服务能力
- DataAbility,数据/数据能力
- FormAbility,以卡片模式展示界面的Ability
FA模型中一个项目就是一个应用,运行时会占一个独立的进程,应用进程在每个Ability第一次启动时创建一个线程,每个Ability独占一个线程,每个Ability绑定一个独立的JSRuntime实例。应用之间是以进程分割的,应用中的Ability之间是以线程隔离的。
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5Cemc%5CAppData%5CRoami
ng%5CTypora%5Ctypora-user-images%5Cimage-20240717160601866.png&pos_id=img-ZZDLas3F-1722063309890)
Stage模型中能力抽象分为
- UIAbility
- ExtensionAbility
其中ExtensionAbility又被扩展为
- ServiceExtensionAbility
- FormExtensionAbility
- DataShareExtensionAbility
2.Stage模型
AppScope > app.json5:应用的全局配置信息。
-
entry:HarmonyOS工程模块,编译构建生成一个HAP包。
-
src > main > ets:用于存放ArkTS源码。
-
src > main > ets > entryability:应用/服务的入口。
-
src > main > ets > pages:应用/服务包含的页面。
-
src > main > resources:用于存放应用/服务所用到的资源文件。
-
src > main > module.json5:模块应用配置文件。
-
build-profile.json5:当前的模块信息 、编译信息配置项,包括buildOption、targets配置等。
-
hvigorfile.ts:模块级编译构建任务脚本,开发者可以自定义相关任务和代码实现。
-
obfuscation-rules.txt:混淆规则文件。。
-
oh_modules:用于存放三方库依赖信息。
-
build-profile.json5:应用级配置信息,包括签名signingConfigs、产品配置products等。。
-
hvigorfile.ts:应用级编译构建任务脚本。
**Stage模型 **
2.1.app.json5 应用配置
{
"app": {
"bundleName": "包名 不可省略",
"vendor": "应用开发厂商描述 不可省略",
"versionCode": 版本号,数值越大版本越高,
"versionName": "给用户看的版本号",
"icon": "应用图标",
"label": "应用名"
}
}
上述应用图标为应用管理的图标,桌面上的应用图标要从modoul.json5来配置文件,配置的其实是Ability入口图标和标签配置。
注意,其实上述应用名称有中英两个属性,注意区分和分别修改。
2.2.UIAbility组件
一种包含UI的应用组件,主要用于和用户交互
一个应用有多个模块
每个模块有多个Ability
每个Ability有多个页面
2.3.UIAbility生命周期
当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。
- onCreate: Ability创建时回调,执行初始化业务逻辑操作。
- onDestory: Ability销毁时回调,执行资源清理等操作。
- onForeground: 当应用从后台转到前台时触发。
- onBackground: 当应用从前台转到后台时触发。
其他知识点:
松耦合
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?
5CTypora%5Ctypora-user-images%5Cimage-20240727115929991.png&pos_id=img-hjWrgSjU-1722063309891)
冷启动和热启动:UIAbility中一般将首次启动叫做冷启动,非首次启动叫做热启动
2.4.同模块Ability拉起和跨模块Ability拉起
同模块Ability拉起
- 准备want作为UIAbility的启动参数
- 利用上下文对象context,调用startAbility传入want启动
三、状态管理
组件状态
1.装饰器@State
2.装饰器@Prop
3.装饰器@Link
这是一个链接 [Markdown语法](https://markdown.com.cn)。
四、模块化语法
模块化:把一个大的程序,拆分成若干小的模块,通过特定的语法,可以进行任意组合。
方式:
- 默认导入导出
- 按需导入导出
- 全部导入
默认导入导出
//默认导出
export defalut 需要导出的内容
//默认导入
import XXX from '模块路径'