UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。
每一个UIAbility实例,都对应于一个最近任务列表中的任务。
一个UIAbility可以对应于多个页面,建议将一个独立的功能模块放到一个UIAbility中,以多页面的形式呈现。例如新闻应用在浏览内容的时候,可以进行多页面的跳转使用。
页面跳转等操作都依靠页面路由组件router来实现,通过页面url来找到目标页面,从而实现跳转,包括跳转到Ability的指定页面、用UIAbility内的某个页面替换当前页面、返回上一页等。
首先,我们需要导入router模块:
import router from '@ohos.router';
API9及以上,router.pushUrl()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard多实例模式。
在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈的元素数量不变;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量会加1。
当页面栈的元素数量较大或者超过32时,可以通过调用router.clear()方法清除页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。
router.pushUrl({
url: 'pages/Second',
params: {
src: 'Index页面传来的数据',
}
}, router.RouterMode.Single)
同样提供了mode参数来配置单例模式或者多例模式。与pushUrl()不同的是,该方法会将目标页面替换当前页面,旧页面会被销毁:
router.replaceUrl({
url: 'pages/Second',
params: {
src: 'Index页面传来的数据',
}
}, router.RouterMode.Single)
其次,我们需要实现页面间参数的接受,可以调用router.getParams()
来获取传递过来的参数
import router from '@ohos.router';
@Entry
@Component
struct Second {
@State src: string = (router.getParams() as Record<string, string>)['src'];
// 页面刷新展示
// ...
}
我们可以调用router.back()
方法来实现返回到上一个页面,同时也可以在调用该方法时增加可选的options参数(增加url参数)返回到指定页面。