梅科尔工作室-王文晴-鸿蒙笔记4

梅科尔王文晴
发布于 2024-1-10 17:52
浏览
0收藏

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页面传递过来的自定义参数。

标签
已于2024-1-22 10:17:46修改
收藏
回复
举报
回复
    相关推荐