HarmonyOS鸿蒙操作系统——路由与Ability笔记

路由与Ability简述

一、路由

1.创建页面

  1. 直接创建page页面

  2. 新建普通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.路由模式

路由提供了两种不同的跳转模式

  1. Standard:无论之前是否添加过,一直添加到页面栈【默认常用】

  2. Single:如果目标页面已存在,会将已有的最近同url页面移到栈顶【看情况使用】

router.pushUrl(options, mode)

5.组件和页面生命周期

组件页面 在创建、显示、销毁的这一整个过程中,会自动执行 一系列的【生命周期钩子】。

其实就是一系列的【函数】,让开发者有机会在特定的阶段运行自己的代码。

  1. aboutToAppear:创建组件实例后执行,可以修改状态变量

  2. aboutToDisappear:组件实例销毁前执行,不允许修改状态变量

  3. onPageShow:页面每次显示触发(路由过程、应用进入前后台)

  4. onPageHide:页面每次隐藏触发(路由过程、应用进入前后台)

  5. 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拉起

  1. 准备want作为UIAbility的启动参数
  2. 利用上下文对象context,调用startAbility传入want启动

三、状态管理

组件状态

1.装饰器@State

2.装饰器@Prop

3.装饰器@Link

vad

这是一个链接 [Markdown语法](https://markdown.com.cn)。

四、模块化语法

模块化:把一个大的程序,拆分成若干小的模块,通过特定的语法,可以进行任意组合。

方式:

  • 默认导入导出
  • 按需导入导出
  • 全部导入

默认导入导出

//默认导出
export defalut 需要导出的内容
//默认导入
import XXX from '模块路径'
  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值