梅科尔工作室-王文晴-鸿蒙笔记4
Ability概述
Ability是一种包含用户界面的应用组件,主要用于和用户进行交互。Ability也是系统调度的单元,为应用提供窗口在其中绘制界面。
每一个Ability实例,都对应于一个最近任务列表中的任务。
一个应用可以有一个Ability,也可以有多个Ability,如图1-1所示。例如浏览器应用可以通过一个Ability结合多页面的形式让用户进行的搜索和浏览内容;而聊天应用增加一个“外卖功能”的场景,则可以将聊天应用中“外卖功能”的内容独立为一个Ability,当用户打开聊天应用的“外卖功能”,查看外卖订单详情,此时有新的聊天消息,即可以通过最近任务列表切换回到聊天窗口进行继续聊天对话。
一个Ability可以对应于多个页面,建议将一个独立的功能模块放到一个Ability中,以多页面的形式呈现。
页面跳转
首先需要导入router模块
方式一:通过调用router.push()方法,跳转到Ability内的指定页面。
说明:每调用一次router.push()方法,均会新建一个页面。默认情况下,页面栈数量会加1,页面栈支持的最大页面数量为32。
当页面栈数量较大或者超过32时,可以通过调用router.clear()方法清除页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。
router.push({
url: ‘pages/Second’,
params: {
src: ‘Index页面传来的数据’,
}
})
方式二:API9及以上,router.push()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard标准模式。
在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近的同url页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈数量不变;如果目标页面的url在页面栈中不存在同url页面,按标准模式跳转,页面栈数量会加1。
router.push({
url: ‘pages/Second’,
params: {
src: ‘Index页面传来的数据’,
}
}, router.RouterMode.Single)
方式三:通过调用router.replace()方法,跳转到Ability内的指定页面。即使用新的页面替换当前页面,并销毁被替换的当前页面,页面栈数量不变。
router.replace({
url: ‘pages/Second’,
params: {
src: ‘Index页面传来的数据’,
}
})
方式四:API9及以上,router.replace()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard标准模式。
在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近的同url页面会被移动到栈顶,替换当前页面,并销毁被替换的当前页面,移动后的页面为新建页,页面栈数量会减1;如果目标页面的url在页面栈中不存在同url页面,按标准模式跳转,页面栈数量不变。
router.replace({
url: ‘pages/Second’,
params: {
src: ‘Index页面传来的数据’,
}
}, router.RouterMode.Single)
已经实现了页面的跳转,接下来,在Second页面中如何进行自定义参数的接收呢?
通过调用router.getParams()方法获取Index页面传递过来的自定义参数。
import router from ‘@ohos.router’;
@Entry
@Component
struct Second {
@State src: string = router.getParams()?.[‘src’];
// 页面刷新展示
…
}
注意:
使用跳转模块时,页面栈支持的最大页面数量为32。当超过32时,便不会再跳转了,所以推荐使用router.push()模块的单实例模式,即跳转方式中的方式二。
router.push()的单实例模式仅在API9下可以使用。
在使用router.back方法时,必须要再次之前使用一次router.push()方法。
当页面栈内的页面数超过数量时,可以使用router.getLength()方法获取当前页面内的页面数量,然后再,然后在使用router.clear()方法清除页面栈。
信息传递
跳转页面通过router.getParams()方法获取Index页面传递过来的自定义参数。
原页面通过router.getParams()方法获取Second页面传递过来的自定义参数。