【鸿蒙 HarmonyOS 4.0】路由router
一、介绍
页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。
二、页面跳转
2.1、两种跳转模式:
- router.pushUrl():目标页不会替换当前页,而是压入页面栈。这样可以保留当前页的状态,并且可以通过返回键或者调用router.back()方法返回到当前页。
- router.replaceUrl():目标页会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。
2.2、两种实例模式
-
Standard:标准实例模式,也是默认情况下的实例模式。每次调用该方法都会新建一个目标页,并压入栈顶。
-
Single:单实例模式。即如果目标页的url在页面栈中已经存在同url页面,则离栈顶最近的同url页面会被移动到栈顶,并重新加载;如果目标页的url在页面栈中不存在同url页面,则按照标准模式跳转。
2.3、使用步骤
2.3.1、导入Router模块
import router from '@ohos.router';
2.3.2、利用router实现跳转、返回等操作
2.3.2.1、不带参数传递的场景
场景1:登录页跳转到首页,需要保留主页在页面栈中,以便返回时恢复状态。
使用pushUrl()方法,并且使用Standard实例模式
import router from '@ohos.router'
@Entry
@Component
struct LoginPage {@State message: string = 'login'build() {Row() {Column({space:6}) {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button('跳转到home页面--pushUrl').fontSize(20).onClick(() =>{router.pushUrl({url:'pages/HomePage'},router.RouterMode.Standard,(err) => {if(err){console.log('路由失败')}})})}.width('100%')}.height('100%')}
}
场景1中,登录跳转到首页时,需要保证每次首页存在于页面栈中,在返回时直接回到登录页。 需要将示例模式更换成Single,即:router.RouterMode.Single
场景2:登录页跳转到首页,销毁登录页,在返回时直接退出应用。
使用replaceUrl()方法,并且使用Standard实例模式
import router from '@ohos.router'
@Entry
@Component
struct LoginPage {@State message: string = 'login'build() {Row() {Column({space:6}) {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button('跳转到home页面--replaceUrl').fontSize(20).onClick(() =>{router.replaceUrl({url:'pages/HomePage'},router.RouterMode.Standard,(err) => {if(err){console.log('路由失败')}})})}.width('100%')}.height('100%')}
}
场景2中,登录跳转到首页时,如果已经存在了就不再新建首页,直接跳转到首页。 需要将示例模式更换成Single,即:router.RouterMode.Single
2.3.2.2、带参数传递的场景
如果需要在跳转时传递一些数据给目标页,则可以在调用Router模块的方法时,添加一个params属性,并指定一个对象作为参数。例如:
Button('跳转到home页面--pushUrl').fontSize(20).onClick(() =>{router.pushUrl({url:'pages/HomePage',params:{id:1}},router.RouterMode.Standard,(err) => {if(err){console.log('路由失败')}})})
在目标页中,可以通过调用Router模块的getParams()方法来获取传递过来的参数。例如:
const params = router.getParams(); // 获取传递过来的参数对象
const id = params['id']; // 获取id属性的值
三、页面返回
3.1、三种返回方式
3.1.1、返回到上一个页面。
router.back();
3.1.2、返回到指定页面
router.back({url: 'pages/Info'
});
这种方式可以返回到指定页面,需要指定目标页的路径。目标页必须存在于页面栈中才能够返回。
3.1.3、返回到指定页面,并传递自定义参数信息。
router.back({url: 'pages/Info',params: {id:1}
});
这种方式不仅可以返回到指定页面,还可以在返回的同时传递自定义参数信息。这些参数信息可以在目标页中通过调用router.getParams()方法进行获取和解析。
在目标页中,在需要获取参数的位置调用router.getParams()方法即可,例如在onPageShow()生命周期回调中:
onPageShow() {const params = router.getParams(); // 获取传递过来的参数对象const id = params['id']; // 获取id属性的值
}
四、页面返回前增加一个询问框
在开发应用时,为了避免用户误操作或者丢失数据,有时候需要在用户从一个页面返回到另一个页面之前,弹出一个询问框,让用户确认是否要执行这个操作。
4.1、系统默认询问框
如果想要在目标界面开启页面返回询问框,需要在调用router.back()方法之前,通过调用router.showAlertBeforeBackPage()方法设置返回询问框的信息。
例如,在Home页面中定义一个返回按钮的点击事件处理函数,点击按钮时弹出询问框,点击确定按钮再返回到登录页
import router from '@ohos.router'
@Entry
@Component
struct HomePage {@State message: string = 'Home'@State params:any = router.getParams()build() {Row() {Column({space:6}) {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Text('接收login传递的id:' + this.params.id).fontSize(30).fontWeight(FontWeight.Bold)Button('返回到login页面').fontSize(20).onClick(() => {router.showAlertBeforeBackPage({message:'确定返回到login页面吗?'})router.back()})}.width('100%')}.height('100%')}
}
其中,router.showAlertBeforeBackPage()方法接收一个对象作为参数,该对象包含以下属性:
- message:string类型,表示询问框的内容。
当用户点击“返回”按钮时,会弹出确认对话框,询问用户是否确认返回。选择“取消”将停留在当前页目标页;选择“确认”将触发router.back()方法,并根据参数决定如何执行跳转。
4.2、自定义询问框
点击按钮时,调用弹窗的promptAction.showDialog()方法:
import router from '@ohos.router'
import promptAction from '@ohos.promptAction'
@Entry
@Component
struct HomePage {@State message: string = 'Home'@State params:any = router.getParams()build() {Row() {Column({space:6}) {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Text('接收login传递的id:' + this.params.id).fontSize(30).fontWeight(FontWeight.Bold)Button('返回到login页面').fontSize(20).onClick(() => {promptAction.showDialog({message:'确定返回到login页面吗?',buttons: [{text: '取消',color: '#FF0000'},{text: '确认',color: '#0099FF'}]}).then((result)=>{if(result.index === 0){// 用户点击了“取消”按钮console.log('点击了取消按钮')}else if(result.index === 1){// 用户点击了“确认”按钮console.log('用户点击了“确认”按钮')// 调用router.back()方法,返回上一个页面router.back();}}).catch(err => {console.error(`Invoke showDialog failed, code is ${err.code}, message is ${err.message}`);})})}.width('100%')}.height('100%')}
}
当用户点击“返回”按钮时,会弹出自定义的询问框,询问用户是否确认返回。选择“取消”将停留在当前页目标页;选择“确认”将触发router.back()方法,并根据参数决定如何执行跳转。
最后:👏👏😊😊😊👍👍

相关文章:
【鸿蒙 HarmonyOS 4.0】路由router
一、介绍 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。 二、页面跳转 2.1、两种跳转模式: router.pushUrl()&…...
AT24C1024的模拟IIC驱动
AT24C1024是基于IIC的EEPROM,容量为1024/8128k bytes。它的引脚如下: 其中A1,A2为硬件地址引脚 WP为写保护引脚,一般我们需要读写,需要接低电平GND,接高的话则仅允许读 SDA和SCL则为IIC通信引脚 芯片通信采用IIC&…...
Stable Diffusion生成式扩散模型代码实现原理
Stable Diffusion可以使用PyTorch或TensorFlow等深度学习框架来实现。这些框架提供了一系列的工具和函数,使得开发者可以更方便地构建、训练和部署深度学习模型。因此可以使用PyTorch或TensorFlow来实现Stable Diffusion模型。 安装PyTorch:确保您已经安…...
解决Keepalived “脑裂”(双VIP)问题
1. 检查广播情况 yum install tcpdump -y tcpdump -i ens33 vrrp -n master 192.168.80.130 与 backup: 192.168.80.131都在广播,正常情况下backup应该是不在广播的,所以可以判断存在防火墙屏蔽vrrp问题,需要设置VRRP过掉防火墙࿰…...
cAdvisor+Prometheus+Grafana 搞定Docker容器监控平台
cAdvisorPrometheusGrafana cAdvisorPrometheusGrafana 搞定Docker容器监控平台1、先给虚拟机上传cadvisor2、What is Prometheus?2.1、架构图 3、利用docker安装普罗米修斯4、安装grafana cAdvisorPrometheusGrafana 搞定Docker容器监控平台 1、先给虚拟机上传cadvisor cAd…...
java基础知识面试题
下面是关于java基础知识的一些常见面试题 equals 与区别 在Java中,""是一个比较操作符,用于比较两个变量的值是否相等。而"equals()"是Object类中定义的方法,用于比较两个对象是否相等。 具体区别如下: &…...
科技云报道:黑马Groq单挑英伟达,AI芯片要变天?
科技云报道原创。 近一周来,大模型领域重磅产品接连推出:OpenAI发布“文字生视频”大模型Sora;Meta发布视频预测大模型 V-JEPA;谷歌发布大模型 Gemini 1.5 Pro,更毫无预兆地发布了开源模型Gemma… 难怪网友们感叹&am…...
解决i18n国际化可读性问题,傻瓜式webpack中文支持国际化插件开发
先来看最后的效果 问题 用过国际化i18n的朋友都知道,天下苦国际化久矣,尤其是中文为母语的开发者,在面对代码中一堆的$t(abc.def)这种一点也不直观毫无可读性的代码,根本不知道自己写了啥 (如上图,你看得出…...
【Django】执行查询—F()表达式
F() F()可以实现将模型字段值与同一模型中的另一字段做比较。举个例子看一下: class Entry(models.Model):...number_of_comments models.IntegerField(default0)number_of_pingbacks models.IntegerField(default0)...找到所有 number_of_pingbacks 大于 numbe…...
202112CSPT4磁盘文件操作
题意:有n个id号,m段空间,k个操作: 0 0 0:从L开始到R或遇到第一个其他非空id号为止,写入 i d id id号以及值 v a l val val;如果成功写入则输出写入成功的最右位置,否则输出-1 1 1 1:若 [ L , …...
5GC SBA架构
协议标准:Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述说明NSSFNetwork Slice Selection Function网络切片选择,根据UE的切片选择辅助信息、签约信息等确定UE允许接入的网络切片实例。NEF Network Exposure Function网络开…...
《求生之路2》服务器如何选择合适的内存和CPU核心数,以避免丢包和延迟高?
根据求生之路2服务器的实际案例分析选择合适的内存和CPU核心数以避免丢包和延迟高的问题,首先需要考虑游戏的类型和对服务器配置的具体要求。《求生之路2》作为一款多人在线射击游戏,其服务器和网络优化对于玩家体验至关重要。 首先,考虑到游…...
精读服务器默认rsyslog的配置文件
rsyslog的配置文件 rsyslog.conf #### MODULES ####$ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal #$ModLoad imklog # reads kernel messages (the same are read…...
Vue2:用node+express部署Vue项目
一、编译项目 命令 npm run build执行命令后,我们会在项目文件夹中看到如下生成的文件 二、部署Vue项目 接上一篇,nodeexpress编写轻量级服务 1、在demo中创建static文件夹 2、将dist目录中的文件放入static中 3、修改server.js文件 关键配置&…...
前端开发人员如何做好SEO
前端开发人员如何做好SEO SEO工作不仅限于专业人员。前端开发者也可以在日常开发中实施一些代码层面的SEO优化。 以下是一些前端常用的SEO方法: 设置合理的title、keywords、description title、keywords、description对SEO至关重要,需贴合页面内容编…...
推荐收藏!分享 PyTorch 中一些高级的索引和选择操作技巧
关于 Pytorch ,我之前分享过很多篇,喜欢的可以收藏、关注、点赞。 这一次,我准备了 20节 PyTorch 中文课程小白学 PyTorch 系列:54个超强 pytorch 操作9个技巧让你的 PyTorch 模型训练飞快!Keras 3.0发布:…...
Apache Calcite 快速入门指南
Apache Calcite 快速入门指南 参考地址:Apache Calcite 快速入门指南 - 知乎 Apache Calcite 是一个动态数据管理框架,提供了:SQL 解析、SQL 校验、SQL 查询优化、SQL 生成以及数据连接查询等典型数据库管理功能。Calcite 的目标是 One Size …...
基于MUSIC算法的六阵元圆阵DOA估计matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于MUSIC算法的六阵元圆阵DOA估计matlab仿真. 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序 ........................................…...
Mysql索引学习
mysql索引-自学版 1 索引语法2 索引类别3 索引原理磁盘IO与预读索引数据结构 B树B树的前生今世B 树代码(进阶) 4 索引使用策略及优化优化索引的几种方法 索引常见面试题面经实战 1 索引语法 索引的语法:创建、修改、增加、删除等操作&#x…...
【MySQL】:高效利用MySQL函数实用指南
🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL函数概论二. 字符串函数三. 数值函数四. 日期函数五. 流程函数…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
