@ohos.router (页面路由)实现页面间跳转与数据传递

一、描述

        本模块提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、用应用内的某个页面替换当前页面、返回上一页面或指定的页面等。

二、导入模块

import router from '@ohos.router'

三、router.pushUrl

1、描述

        跳转到应用内的指定页面。

        router.pushUrl这种方式的回调方式有两种,一种是Promise,另一种的callback。我们接下来已Promise回调方式为列。

2、接口

Promise方式:router.pushUrl(options: RouterOptions):Promise<void>

Callback方式:router.pushUrl(options: RouterOptions, callback: AsyncCallback<void> ):void

Promise方式:router.pushUrl(options: RouterOptions, mode: RouterMode):Promise<void>

Callback方式:router.pushUrl(options: RouterOptions, , mode: RouterMode , callback:AsyncCallback<void> ):void

3、参数

参数名类型说明
optionsRouterOptions跳转页面描述信息。
modeRouterMode跳转页面使用的模式。
callbackAsyncCallback<void>异常相应回调。

        RouterOptions类说明:

名称类型必填说明
urlstring

表示目标页面的Url,可以使用一下两种格式:

--页面绝对路径,由配置文件中pages列表提供,例如:“pages/index/index”等。

--特殊值,如果url的值是“/”,则跳转到首页。

paramsobject表示路由调转时要同时传递到目标页面的数据,切换到其它页面时,当前接收的数据无效。跳转到目标页面后使用router.getParams()获取传递的参数,并且是自行构建object类型对象进行传递的。

        RouterMode枚举类说明:

名称说明
Standard

多实例模式,也是默认情况下的跳转模式。目标页面会被添加到页面栈顶,无论栈中是否存在相同的url的页面。

说明:

不使用路由跳转模式时,则按照默认的多实例模式进行跳转。

Single单实例模式。如果目标页面的url已经存在于页面栈中,则该url页面移动到栈顶。如果目标页面的url不存在于页面栈中,则按照默认的多实例默认进行跳转。

4、示例

示例1-Promise(一个参数):

// 导入模块
import router from '@ohos.router';@Entry
@Component
struct RouterPage {@State message: string = 'router.pushUrl-跳转到应用内的指定页面'build() {Row() {Column() {Text(this.message).fontSize(20).fontWeight(FontWeight.Bold).width("96%")// router.pushUrl的回调方式有两种,一种的Promise、一种的callbackButton("router.pushUrl").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {router.pushUrl({url: "pages/api/PushUrlSecondPage",params: {msg: "message RouterPage",coreEntity: {coreArray: [80, 36, 88]}}}).then(() => {console.info("router.pushUrl Promise success")}).catch((err) => {console.error(`router.pushUrl Promise failed, code is ${err.code}, message is ${err.message}`);})})}.width('100%').height("100%")}.height('100%')}
}

示例1-callback(两个参数)

......
Button("router.pushUrl-callback").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {router.pushUrl({url: "pages/api/PushUrlSecondPage",params: {msg: "message RouterPage",coreEntity: {coreArray: [80, 36, 88]}}}, (error) => {if (error) {console.error(`router.pushUrl callback failed, code is ${error.code}, message is ${error.message}`);}});});
......

示例3-Promise(两个参数,增加跳转模式):

Button("router.pushUrl-RouterMode").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {router.pushUrl({url: "pages/api/PushUrlSecondPage",params: {msg: "message RouterPage",coreEntity: {coreArray: [80, 36, 88]}}}, router.RouterMode.Single)})

打印结果:

四、router.replaceUrl

1、描述

        用应用内的某个页面替换当前页面,并销毁被替换的页面。(其实就是跳转时关闭当前页并打开新的页面,当再点击返回按钮时就会回到上上个页面了)

        outer.replaceUrl这种方式的回调方式有两种,一种是Promise,另一种的callback。我们接下来已Promise回调方式为列。

2、接口

Promise方式:router.replaceUrl(options: RouterOptions):Promise<void>

Callback方式:router.replaceUrl(options: RouterOptions, callback: AsyncCallback<void> ):void

Promise方式:router.replaceUrl(options: RouterOptions, mode: RouterMode):Promise<void>

Callback方式:router.replaceUrl(options: RouterOptions, , mode: RouterMode , callback:AsyncCallback<void> ):void

3、参数

参数RouterOptions、RouterMode参数内容同上。

4、示例

// 一个参数,只有替换页面描述信息Button("router.replaceUrl").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {router.replaceUrl({url: "pages/api/router/PushUrlSecondPage",params: {msg: "message RouterPage",coreEntity: {coreArray: [80, 36, 88]}}}).then(() => {console.info("router.replaceUrl Promise success")}).catch((err) => {console.error(`router.replaceUrl Promise failed, code is ${err.code}, message is ${err.message}`);})})// 两个参数,增加跳转模式Button("router.replaceUrl-RouterMode").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {router.replaceUrl({url: "pages/api/router/PushUrlSecondPage",params: {msg: "message RouterPage",coreEntity: {coreArray: [80, 36, 88]}}}, router.RouterMode.Standard)})

五、router.back

1、描述

        返回上一页面或指定的页面。

2、接口

router.back(options?: RouterOptions): void

3、参数

参数RouterOptions、RouterMode参数内容同上。

4、示例

// 返回上一个页面Button("router.back").margin({ top: 12 }).width("96%").onClick(() => {router.back()})// 跳转指定页面Button("router.back-url").margin({ top: 12 }).width("96%").onClick(() => {router.back({url: "pages/api/BaseApiPage"})})

说明:返回页面描述信息,其中参数url指路由跳转时会返回到指定url的界面,如果页面栈上没有url页面,则不响应该情况。如果url未设置,则返回上一页,页面不会重新构建,页面栈里面的page不会回收,出栈后会被回收。

六、其它路由接口

1、router.clear

clear(): void

清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。

示例:

router.clear();    

2、router.getLength

getLength(): string

获取当前在页面栈内的页面数量。

返回值 - string - 页面数量,页面栈支持最大数量是32.

示例:

let size = router.getLength();        
console.log('pages stack size = ' + size);    

上述两个接口总体代码:

// 获取当前在页面栈内的页面数量。Button("router.getLength").margin({ top: 12 }).fontSize(22).width("96%").onClick(() => {let size = router.getLength();console.log('zhangRouter router.getLength result size = ' + size);})//清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。Button("router.clear").margin({ top: 12 }).fontSize(22).width("96%").onClick(() => {router.clear();console.log('zhangRouter onClick router.clear()');})

打印结果:

3、router.getState

getState(): RouterState

获取当前页面的状态信息。

返回值RouterState说明:

名称类型必填说明
indexnumber表示当前页面在页面栈中的索引。从栈底到栈顶,index从1开始递增。
namestring表示当前页面的名称,即对应文件名。
pathstring表示当前页面的路径。

示例:

// 获取当前页面的状态信息Button("router.getState").margin({ top: 12 }).fontSize(22).width("96%").onClick(() => {let rState = router.getState();console.log('zhangState current index = ' + rState.index);console.log('zhangState current name = ' + rState.name);console.log('zhangState current path = ' + rState.path);})

打印结果:

路径:

4、router.showAlertBeforeBackPage

showAlertBeforeBackPage(options: EnableAlertOptions): void

开启页面返回询问对话框。

参数:

参数名称类型必填说明
optionsEnableAlertOptions文本弹窗信息描述。

EnableAlertOptions说明:

名称类型必填说明
messagestring询问对话框内容。

示例:

  // 开启页面返回询问对话框Button("router.showAlertBeforeBackPage").margin({ top: 12 }).fontSize(22).width("96%").onClick(() => {router.showAlertBeforeBackPage({message: "Message Info"})})

说明:在该页面调用showAlertBeforeBackPage接口之后,在该页面返回时弹出一个提示框,提示框提示内容是“message”对应内容,并且还有两个按钮,一个“取消”,一个“确定”,点击取消还停留在该页面,点击确定,返回到上一页。(注意:这个功能点击后只有效一次

5、router.hideAlertBeforeBackPage

hideAlertBeforeBackPage(): void

禁用页面返回询问对话框。

示例:

router.hideAlertBeforeBackPage();    

6、router.getParams

getParams(): Object

获取发起跳转的页面往当前页传入的参数。

返回值说明:

类型

说明

object

发起跳转的页面往当前页传入的参数。

示例:

第一个页面传数据:

 router.pushUrl({url: "pages/api/router/PushUrlSecondPage",params: {msg: "message RouterPage",coreEntity: {coreArray: [80, 36, 88]}}

第二个页面接受数据:

@State paramsMsg: string = router.getParams()["msg"];
@State coreEntity: object = router.getParams()["coreEntity"];
......Text(this.paramsMsg).fontSize(20).width("96%").margin({ top: 12 })Text("传递的coreArray第一条数据:" + this.coreEntity["coreArray"][0]).fontSize(20).width("96%").margin({ top: 12 })

        至此,关于Router页面路由相关接口就全部讲解完了,如果有写错的地方或者有需要交流的地方,大家可以留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/562786.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对话悠易科技蔡芳:品牌逐渐回归核心能力建设,布局和构建自己的流量阵地

关于SaaS模式在中国的发展&#xff0c;网上出现多种声音。Marteker近期采访了一些行业专家&#xff0c;围绕SaaS模式以及Martech在中国的发展提出独特观点。悠易科技副总裁蔡芳认为&#xff0c;中国目前存在SaaS的应用场景与客户需求&#xff0c;用户的应用能力也在提升&#x…

代码随想录day29(2)二叉树:将有序数组转换为二叉搜索树(leetcode108)

题目要求&#xff1a;将一个按照升序排列的有序数组&#xff0c;转换为一棵高度平衡二叉搜索树。 思路&#xff1a;思路比较简单&#xff0c;如果目标是平衡二叉树&#xff0c;我们每次只需要取数组的中间元素作为根节点&#xff0c;分成左右两个子树&#xff0c;再递归地进行…

二叉树的遍历及线索二叉树试题(三)

一、单项选择题 01.在下列关于二叉树遍历的说法中&#xff0c;正确的是( ). A.若有一个结点是二叉树中某个子树的中序遍历结果序列的最后一个结点&#xff0c;则它一定是该子树的前序遍历结果序列的最后一个结点 B.若有一个结点是二叉树中某个子树的前序遍历结果序列的最后一…

mysql置事务隔离级

隔离级别脏读&#xff08;Dirty Read&#xff09;不可重复读&#xff08;Non-Repeatable Read&#xff09;幻读&#xff08;Phantom Read&#xff09;读未提交是是是读已提交否是是可重复读否否是序列化否否否 这个表格以可读性的方式总结了四种隔离级别下可能发生的并发问题。…

子网掩码,网段,网关

IP地址、子网掩码、网段、网关【网络常识 2】_哔哩哔哩_bilibili 网关&#xff1a; 什么时候需要用到网关&#xff1a; 若目标IP在同一网段则可以直接通信不需要经过网关&#xff0c;否则需要。 怎么判断对方的ip是否与我在同一网段呢&#xff1f; 判断网络号是否相同。 电…

mac 安装 nvm 【真解决问题】

前提 没有node环境已有git 下载 我用的gitee极速下载 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev0 --tags配置 1. 配置变量 在用户的目录下新增文件 .zshrc export NVM_DIR"$HOME/…

MYSQL多表设计,多表查询,事务,索引

目录 一多表设计 1.1 一对多 1.1.1 外键约束 1.2一对一 1.3多对多 二多表查询 2.1数据准备&#xff1a; 2.2笛卡儿积&#xff1a; 2.3 分类 2.3.1内连接 2.3.2外连接 三子查询 3.1标量子查询 3.2列子查询 3.3行子查询 3.4表子查询 四事务 4.1场景 4.2语法…

Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准

前言 Git Commit 是开发的日常操作, 一个优秀的 Commit Message 不仅有助于他人 Review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略&#xff0c;希望通过本文&#xff0c;能够帮助大家规范 Git Commit&#xff0c;并且展示相关 …

OpenHarmony实战开发-手写板应用开发操作流程

分布式手写板&#xff08;ArkTS&#xff09; 介绍 本篇Codelab使用设备管理及分布式键值数据库能力&#xff0c;实现多设备之间手写板应用拉起及同步书写内容的功能。操作流程&#xff1a; 设备连接同一无线网络&#xff0c;安装分布式手写板应用。进入应用&#xff0c;点击…

查立得源码如何去除版权

最近发现很多人百度&#xff1a;查立得源码如何去除版权。 每个源代码/软件都是有版权的&#xff0c;无法去除&#xff0c;我们也得尊重知识产权/劳动成果。 可以去除/修改的是&#xff1a;页面显示的版权信息,查立得底部信息均可自定义(一般conn.php可修改)。 另&#xff1…

【数据分析案列】--- 北京某平台二手房可视化数据分析

一、引言 本案列基于北京某平台的二手房数据&#xff0c;通过数据可视化的方式对二手房市场进行分析。通过对获取的数据进行清冼&#xff08;至关重要&#xff09;&#xff0c;对房屋价格、面积、有无电梯等因素的可视化展示&#xff0c;我们可以深入了解北京二手房市场的特点…

鸿蒙Harmony应用开发—ArkTS-枚举说明

说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Color 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 颜色名称颜色值颜色示意Black0x000000 Blue0x0000ff Brown…