文章目录
stage模型
如上图所示,蓝色框内就是代表一个模块,一个工程下可以有n个模块,但只能有一个entry模块,即入口模块(核心),里面是该APP的主要功能。模块分为两种类型:Ability Module和Library Module模块,前者是能力模块,用于实现对应的页面和功能,后者是共享模块,里面的功能和已经创建的组件可以被其他模块共同调用,减少重复代码的书写。 所有模块在编译期统称为Bundle。每个模块都可以单独运行和测试
在代码运行时,每个模块都会搭建各自的"舞台",结构如上图,ArkUI Page :展示出来的UI界面,即与用户直接交互的地方,UIAbility是包含UI界面的应用组件,通过Window来将UI界面展示给用户,WindowStage是窗口的"舞台"。一个模块下可以有多个ability。
stage模型应用配置文件
app.json5 文件里面是整个APP的全局配置信息,“bundleName” 是APP对应的唯一标识。"icon"对应APP在设置中的应用管理中的应用图标,"label"对应的是应用在设置中的应用管理中的名称。
module.json5 文件是对应模块特有的配置文件,“requestPermission” 用于向用户或系统申请权限,“name” 对应的是该模块名字,“type” 对应的是该模块的类型,
“description” 用于描述该模块内容,“mainElement” 当该模块下有多个ability(UIAbility或ExtensionAbility)时,用于标识入口ability,“deviceTypes” 该模块适用的设备,
“deliveryWithInstall” 该模块是否跟着APP一同被安装(有些模块可以设置为用户选择性安装),“pages” 是存放该模块下所有的页面路径的文件,“abilities” 是该模块下所有ability的对应属性,其中的"icon"和"label"对应的是APP在桌面上的应用图标和名称,"launchType"对应该ability的启动模式。
应用程序入口—UIAbility
UIAbility概述
UIAbility就是包含有用户界面的一个组件-----即应用程序的入口,通过用户界面与用户进行交互。其也是系统调度的单元。
打开程序,进入用户界面,有3种方法:
1.点击桌面图标进入应用。
2.在一个应用中打开另一个应用。
3.从最近任务列表中切回应用(每一个UIAbility实例,都对应一个最近任务列表中的任务,一个应用可以有一个或者多个UIability,而UIability里面也可以有一个或者多个页面)。
如一般的浏览器应用,通过一个UIAbility结合多页面的形式为用户提供服务。
页面间的跳转和数据传递
注意:页面通过DevEco进行创建,会自动注册:
若是通过拷贝复制,或创建ArkTS空白文件而得到的页面,需要开发者去手动注册:
代码中所有的跳转页面路径必须按照注册的路径写,不能缩写。
页面跳转
引入头文件:import router from '@ohos.router'
;
通过方法1:router.pushUrl()(新建一个页面,不会销毁原页面)
router.pushUrl({
url: 'pages/Second', //要跳转的目标页面所在路径
params: {
变量名:值} //由要跳转的原页面传递过去的参数
},router.RouterMode.Single)
(变量名是随意命名的,值是你要传递的那个值)
router.RouterMode.Single和router.RouterMode.Standard表示单例模式和多例模式。
在单例模式下,如果目标页面URL在页面栈中已经存在相同的URL页面,离栈顶最近的相同的URL页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈中的元数数量不变,如果目标页面URL在页面栈中不存在相同的URL页面,按多例模式跳转,页面总个数+1。
通过方法2:router.replaceUrl()(新建一个页面,替换并销毁原页面)
注意:由于当前页面被替换并销毁,把以跳转回去后就无法再回退回来了
router.replaceUrl({
url: 'pages/Second', //要跳转的目标页面所在路径
params:{
变量名:值} //由要跳转的原页面传递过去的参数
},router.RouterMode.Single)
在单例式下,如果目标页面的URL在页面栈中已经存在相同的URL页面,离栈顶最近同URL页面会被移动到栈顶,替换当前页面,并销毁被替换的当前页面,移动后的页面为新建页面,页面栈的元素数量会-1;如果目标页面的URL在页面栈中不存在相同的URL页面,按多例模式跳转,页面栈元素数量不变。
参数接收与页面返回
- 通过调用
router.getParams()
方法来接收传递过来的自定义参数
import router from '@ohos.router';
@Entry
@Component
struct Second {