鸿蒙开发 - 页面路由(页面跳转、返回)

news/2025/3/6 10:11:01/文章来源:https://www.cnblogs.com/naturl/p/18754383

Harmony OS NEXT版本(接口及解决方案兼容API12版本或以上版本)

这篇文章主要介绍一个路由模块 @ohos.router,该模块提供了很多方式进行跳转页面,包括跳转到指定页面、替换当前页面、返回上一页,返回指定页(但官方并不推荐这种方式)

跳转指定页面

pushUrl

这种跳转方式:会保留当前页面,压入页面栈(目标页面会有返回按钮,可以返回上一个页面)

例如从首页 IndexPage 跳转到详情页 DetailPage,如下:

import router from '@ohos.router'router.pushUrl({url: 'pages/DetailPage'
})

replaceUrl

这种跳转方式:替换了当前页面,当前页面不会保留,销毁了当前页面

例如从登录页 LoginPage 跳转到首页 IndexPage,如下:

import router from '@ohos.router'router.replaceUrl({url: 'pages/IndexPage'
})

带参数的路由跳转

列表页面 ListPage.ets

从列表页 ListPage 跳转到详情页 DetailPage,调用方法时添加一个 params 属性,并传递列表项的 idname 作为参数

import router from '@ohos.router'interface TypeInterface {id: number;name: string;
}@Entry
@Component
struct ListPage {@State listData: Array<TypeInterface> = [{ id: 1, name: 'item1' },{ id: 2, name: 'item2' }]build() {Row() {Column() {ForEach(this.listData, (item: TypeInterface) => {Text(`列表条目:${item.name}`).onClick(() => {router.pushUrl({url: 'pages/router/DetailPage',params: item})})})}}}
}

详情页 DetailPage.ets

详情页使用 router.getParams() 获取列表页传过来的参数

import router from '@ohos.router'interface TypeInterface {id: number;name: string;
}@Entry
@Component
struct DetailPage {@State itemId: number = 0@State itemName: string = ''onPageShow() {let params = router.getParams() as TypeInterfaceif (params) {this.itemId = params.idthis.itemName = params.name}}build() {Row() {Column() {Text(`详情页 - id:${this.itemId},name:${this.itemName}`)}}}
}

img.png

跳转命名路由页面

比如A页面跳转到B页面,如下:

B页面:

B页面需要使用 routeName 给这个页面命一个名字

@Entry({ routeName: 'B' })

A页面:

A页面指定B页面的名字

router.pushNameRouter({name: 'B'})

页面返回

  1. 返回上一页
router.back()
  1. 返回指定页面
router.back({url: 'pages/home'
})
  1. 返回到指定页面,并传递参数
router.back({url: 'pages/home',params: {id: 1}
})

指定页面使用 router.getParams() 获取参数

某些场景

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

当在某些特殊场景的时候,监听到用户返回上一个页面,会做些提示处理。比如用户到了支付界面,没有支付完成,返回上个页面会进行提示,如下:

onBackPress(){try {router.showAlertBeforeBackPage({message: '您还没有完成支付,确定要返回吗?'})} catch(err){console.error(`Invoke showAlertBeforeBackPage failed, code is ${err.code}, message is ${err.message}`)}
}

最后

文档地址

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

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

相关文章

【域攻击】RDP连接多开方法与利用思路

场景: 在拿下目标域内主机的情况下,如何多开RDP链接且使得正常登录目标主机的用户不会被强制下线或者发现。具体实现测试环境 域内主机:Windows 7 主机地址:192.168.174.170正常情况 Step 1:普通用户(Al1ex)正常登录域内主机Step 2:攻击者在拿下目标主机的情况下,开启远…

构建全链路数字化油库防控体系,全面提升油库数质量安全管理水平

一、背景与挑战 油库作为国家石油储备和供应的关键设施,是连接原油生产、加工、运输和供应的重要纽带。然而,随着国内外油品资源紧张形势的加剧,油库在收发、存储、运输等环节的数质量管理面临严峻挑战。偷漏油现象屡禁不止,管道破损、设备老化、非法操作等问题频发,不仅造…

20242825 2024-2025-2 《网络攻防实践》第一周作业

@目录一、知识点梳理与总结二、攻防环境搭建过程(一)前提知识以及拓扑结构1.1 相关软件总结1.2 拓扑结构图(二)网络配置过程2.1 VMnet1配置2.2 VMnet8配置(三)各虚拟机配置及测试过程3.1 kali攻击机配置3.1.1 在kali安装时遇到问题3.1.2 解决问题重新安装kali3.1.3 安装完…

修改el-table样式之cell-class-name

修改el-table样式有好几种方式,有修改行,列,表头,这里讲的是修改列,且是列中cell的样式,因为表格是前任封装好的,无法在内部随意修改加类名,故无法使用cell-style单独完成,这里介绍cell-class-name属性完成 原图: 表格被前人封装为超出一定长度显示省略号,这里测试要…

C6678学习笔记(2)启动模式设置

拨码开关和跳线接法 跳线接法 参考文献:TMDXEVM6678L_Technical_Reference_Manual_2V00.pdf(在附赠的光盘中) 需要注意的是网上搜的参考手册有部分是第一版的,PCB布局是有些差异的,例如LED灯的位置,以光盘中的使用手册为准。跳线是用来选择串口的,如图的这种接法选择的是…

基于CANoe的HTTP节点仿真与测试实践

1. 背景在汽车电子系统测试中,CANoe作为主流的仿真测试工具,常需与云端服务器、第三方软件或物联网设备进行交互。随着CANoe与外部软件、服务器或设备交互越来越多,直接使用Socket进行通信往往不能满足使用需求,依托于CANoe 的连接功能集(Connectivity Feature Set),以及…

Web前端入门第 16 问:学会使用开发者工具调试 HTML 页面

HELLO,这里是大熊学习前端开发的入门笔记。 本系列笔记基于 windows 系统。有没有好奇,前面文章中的截图是怎么来的?怎样查看 HTML 的渲染结果? Web 开发者的照妖镜 曾经火狐( Firefox )是 Web 前端开发者最喜爱的浏览器,因为他家有一个神器 firebug 方便调试前端代码。…

Web前端入门第 17 问:前端开发编辑器及插件推荐

HELLO,这里是大熊学习前端开发的入门笔记。 本系列笔记基于 windows 系统。虽然说 Web 前端开发用记事本也能玩,但正常的开发者绝不用记事本玩(大佬除外)。 想想要用记事本扣一个淘宝、京东,那场景可真是美呆了。 一个好的编辑器,绝对可以事半功倍的。 编辑器可以提供哪些…

Web前端入门第 15 问:学会查阅 HTML 文档

HELLO,这里是大熊学习前端开发的入门笔记。 本系列笔记基于 windows 系统。HTML的魔法世界,多姿多彩,千变万化。 授人以鱼不如授人以渔,文档阅读是开发者必备的技能,毕竟代码出现 BUG,也要知道为什么会出现 BUG 吧。 就像车辆使用手册一样,多翻翻使用手册,总会发现一些…

Web前端入门第 12 问:HTML 常用属性一览

HELLO,这里是大熊学习前端开发的入门笔记。 本系列笔记基于 windows 系统。 HTML 常用属性大约 70 个,是否又头大了?脸上笑嘻嘻,心里嘛...嘿嘿... 温馨提示:属性不用死记硬背,多练多写慢慢就记住了。 全局常用属性 全局属性为 HTML 元素的通用属性,可以在任何元素上使用…

Web前端入门第 8 问:HTML !DOCTYPE 申明有何用处?如果没有此申明有什么问题?

HELLO,这里是大熊学习前端开发的入门笔记。 本系列笔记基于 windows 系统。先电脑端浏览器打开任何一个网页,比如百度。 再用 ctrl + u 快捷键即可查看源码,瞅瞅第一行代码,是不是都是 <!DOCTYPE xxx> 开头。 是否好奇这这行代码有嘛用? DOCTYPE 语法规则声明必须是…

Web前端入门第 9 问:HTML 块级元素,内联块元素,内联元素三者有什么区别?

HELLO,这里是大熊学习前端开发的入门笔记。 本系列笔记基于 windows 系统。HTML 中的元素根据其默认的 显示类型 主要分为三类:块级元素、内联元素 和 内联块元素。 它们的核心区别在于布局行为和样式控制的支持程度。 块级元素 块级元素(Block Elements)是指在 HTML 中以块…