当前位置: 首页 > news >正文

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件

鸿蒙开发-UI-组件2

鸿蒙开发-UI-组件3

鸿蒙开发-UI-气泡/菜单

文章目录

一、基本概念

二、页面跳转

1.router基本概念

2.使用场景

3.页面跳转参数传递

三、页面返回

1.普通页面返回

2.页面返回前增加一个询问框

1.系统默认询问框

2.自定义询问框

总结


前言

前面系列文章,我们详细学习了鸿蒙开发UI组件相关知识,学习了组件基本使用方法、自定义样式以及各种组件的使用场景,本文将学习鸿蒙开发UI页面路由

一、基本概念

页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面

二、页面跳转

1.router基本概念

2.使用场景

场景一:一个主页Home.ets和一个详情页Detail.ets,主页点击一个商品跳转到详情页,详情页点击返回回到主页

实现:pushUrl() + Standard

代码示例:

//step1:导入系统提供router模块
import router from '@ohos.router';//step2:在Home.ets页面,定义跳转按钮的绑定事件
function onJumpClick(): void {
//step3:调用pushUrl,
// 1.定义跳转到目标url,
// 2.设置实例模式(默认standard,可以省略)
// 3.定义跳转状态的回调函数,如果成功打印成功信息,如果失败打印失败信息router.pushUrl({url: 'pages/Detail' }, router.RouterMode.Standard, (err) => {if (err) {console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`);return;}console.info('Invoke pushUrl succeeded.');});
}

场景二:一个登录页Login.ets和一个个人中心页Profile.ets,登录页成功登录后跳转到个人中心页,同时销毁登录页,在返回时直接退出应用

实现:replaceUrl() + Standard

代码示例:

//step1:导入系统提供router模块
import router from '@ohos.router';//step2:在Login.ets页面,定义跳转按钮的绑定事件
function onJumpClick(): void {
//step3:调用replaceUrl,
// 1.定义跳转到目标url,
// 2.设置实例模式(默认standard,可以省略)
// 3.定义跳转状态的回调函数,如果成功打印成功信息,如果失败打印失败信息router.replaceUrl({url: 'pages/Profile' }, router.RouterMode.Standard, (err) => {if (err) {console.error(`Invoke replaceUrlfailed, code is ${err.code}, message is ${err.message}`);return;}console.info('Invoke replaceUrlsucceeded.');});
}

场景三:一个设置页Setting.ets和一个主题切换页Theme.ets,从设置页点击主题选项,跳转到主题切换页。同时需要保证每次只有一个主题切换页存在于页面栈中,在返回时直接回到设置页

实现:pushUrl() + Single

代码示例:

//step1:导入系统提供router模块
import router from '@ohos.router';//step2:在Setting.ets页面,定义跳转按钮的绑定事件
function onJumpClick(): void {
//step3:调用pushUrl,
// 1.定义跳转到目标url,
// 2.设置实例模式(默认standard,可以省略)
// 3.定义跳转状态的回调函数,如果成功打印成功信息,如果失败打印失败信息router.pushUrl({url: 'pages/Theme' }, router.RouterMode.Single, (err) => {if (err) {console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`);return;}console.info('Invoke pushUrl succeeded.');});
}

场景四:一个搜索结果列表页SearchResult.ets和一个搜索结果详情页SearchDetail.ets,从搜索结果列表页点击某一项结果,跳转到搜索结果详情页。如果该结果已经被查看过,则不需要再新建一个详情页,而是直接跳转到已经存在的详情页

实现:replaceUrl() + Single

代码示例:

//step1:导入系统提供router模块
import router from '@ohos.router';//step2:在SearchResult.ets页面,定义跳转按钮的绑定事件
function onJumpClick(): void {
//step3:调用replaceUrl,
// 1.定义跳转到目标url,
// 2.设置实例模式(默认standard,可以省略)
// 3.定义跳转状态的回调函数,如果成功打印成功信息,如果失败打印失败信息router.replaceUrl({url: 'pages/SearchDetail' }, router.RouterMode.Single, (err) => {if (err) {console.error(`Invoke replaceUrlfailed, code is ${err.code}, message is ${err.message}`);return;}console.info('Invoke replaceUrlsucceeded.');});
}

3.页面跳转参数传递

页面跳转源页面构造传递数据

代码示例

//step1:定义页面传递数据的模型
class DataModelInfo {age: number;
}class DataModel {id: number;info: DataModelInfo;
}function onJumpClick(): void {
//step2:定义跳转页面,传递的数据实例paramsInfolet paramsInfo: DataModel = {id: 123,info: {age: 20}};
//step3:pushUrl方法中 定义params并将页面跳转传递数据实例赋值给params参数router.pushUrl({url: 'pages/Detail',params: paramsInfo }, (err) => {if (err) {console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`);return;}console.info('Invoke pushUrl succeeded.');})
}

页面跳转目标页面接收传递数据

代码示例

const params = router.getParams(); // 获取传递过来的参数对象
const id = params['id']; // 获取id属性的值
const age = params['info'].age; // 获取age属性的值

三、页面返回

当用户在一个页面完成操作后,通常需要返回到上一个页面或者指定页面,这就需要用到页面返回功能。在返回的过程中,可能需要将数据传递给目标页,这就需要用到数据传递功能。

1.普通页面返回

用以下几种页面返回方式

方式一:返回到上一个页面

router.back();

方式二:返回到指定页面

router.back({url: 'pages/Home'
});

方式三:返回到指定页面并传递自定义参数信息

router.back({url: 'pages/Home',params: {info: '来自Home页'}
});

2.页面返回前增加一个询问框

在开发应用时,为了避免用户误操作或者丢失数据,有时候需要在用户从一个页面返回到另一个页面之前,弹出一个询问框,让用户确认是否要执行这个操作。

1.系统默认询问框

Router模块提供的两个方法可以实现返回前弹窗询问框,router.showAlertBeforeBackPage() + router.back()

router.showAlertBeforeBackPage()方法接收一个对象作为参数,该对象包含一个message属性,s类型为string,表示询问框的内容。如果调用成功,则会在目标界面开启页面返回询问框;如果调用失败,则会抛出异常,并通过err.code和err.message获取错误码和错误信息。

当用户点击“返回”按钮时,会弹出确认对话框,询问用户是否确认返回。选择“取消”将停留在当前页目标页;选择“确认”将触发router.back()方法,并根据参数决定如何执行跳转。

代码示例,通过step1,step2,step3 完成页面返回弹出系统默认询问框的操作

//step1:导入页面路由Router模块
import router from '@ohos.router';
//step2:定义一个返回按钮的点击事件处理函数
function onBackClick(): void {//step3: 调用router.showAlertBeforeBackPage()方法,设置返回询问框的信息try {router.showAlertBeforeBackPage({message: '您还没有完成支付,确定要返回吗?' // 设置询问框的内容});} catch (err) {console.error(`Invoke showAlertBeforeBackPage failed, code is ${err.code}, message is ${err.message}`);}//step4: 调用router.back()方法,返回上一个页面router.back();
}

2.自定义询问框

自定义询问框的方式,可以使用弹窗和自定义弹窗来实现,这样可以让应用界面与系统默认询问框有所区别,提高应用的用户体验度。实现方式是通过promptAction.showDialog()打开弹窗

代码示例

//step1:先导入Router模块
import router from '@ohos.router';
//step2:定义点击返回回调函数
function onBackClick() {//step3:弹出自定义的询问框,message属性定义弹框提示信息,buttons数组定义弹框中按钮,then定义弹框按钮被点击后响应逻辑,catch定义弹框按钮被点击异常响应逻辑promptAction.showDialog({message: '您还没有完成支付,确定要返回吗?',buttons: [{text: '取消',color: '#FF0000'},{text: '确认',color: '#0099FF'}]}).then((result) => {if (result.index === 0) {// 用户点击了“取消”按钮console.info('User canceled the operation.');} else if (result.index === 1) {// 用户点击了“确认”按钮console.info('User confirmed the operation.');// 调用router.back()方法,返回上一个页面router.back();}}).catch((err) => {console.error(`Invoke showDialog failed, code is ${err.code}, message is ${err.message}`);})
}

当用户点击step2定义的回调函数绑定的按钮时,会弹出自定义的询问框,询问用户是否确认返回。选择“取消”将停留在当前页目标页;选择“确认”将触发router.back()方法,并根据参数决定如何执行跳转。


总结

本文详细学习了鸿蒙开发UI页面跳转的相关知识,学习页面路由router基本概念,使用方法,页面路由两种跳转模式和两种实例模式的区别以及不同跳转模式和实例模式组合下的使用场景,学习了页面跳转后普通返回和带弹窗的返回使用方法,学习了页面带数据的跳转方式以及目标页面接收数据的方法,下文将学习鸿蒙UI开发组件导航。

相关文章:

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 文章目录 一、基本概念 二、页面跳转 1.router基本概念 2.使用场景 3.页面跳转参数传递 三、页面返回 1.普通页面返回 2.页面返回前增加一个询问框 1.系统默认询问框 2.自定义询问框 总…...

【Git】多个托管平台Git账户配置

目录 多个托管平台GIt账户如何配置SSH 路由配置验证 用户名邮箱配置验证 多个托管平台GIt账户如何配置 通常情况,公司会搭建自己的gitlab代码托管服务或者将代码托管到第三方平台上,而我们自己的开源项目通常托管到Github上,每个托管平台都有…...

vue2 图片懒加载vue-lazyload 插件

1、npm install vue-lazyload --save 2、在项目的主文件(例如 main.js)中引入和使用插件: import Vue from vue import VueLazyload from vue-lazyloadVue.use(VueLazyload) 3、现在,你可以在需要懒加载图片的组件中使用 v-laz…...

element-ui button 组件源码分享

element-ui button 源码分享,基于对源码的理解,编写一个简单的 demo,主要分三个模块来分享: 一、button 组件的方法。 1.1 在方法这块,button 组件内部通过暴露 click 方法实现,具体如下: 二、…...

Spring实现事务(一)

Spring事务 .什么是事务事务的操作Spring中事务的实现准备工作创建表创建项目,引入Spring Web, Mybatis, mysql等依赖配置文件实体类 编程式事务(手动写代码操作事务)声明式事务(利用注解自动开启和提交事务) . 什么是事务 事务是⼀组操作的集合, 是⼀个不可分割的操作 在我们…...

获取依赖aar包的两种方式-在android studio里引入 如:glide

背景:我需要获取aar依赖到内网开发,内网几乎代表没网。 一、 如何需要获取依赖aar包 方式一:在官方的github中下载,耗时不建议 要从开发者网站、GitHub 存储库或其他来源获取 ‘com.github.bumptech.glide:glide:4.12.0’ AAR 包&#xff…...

vue3-深入组件-依赖注入

Prop 逐级透传问题 通常情况下,当我们需要从父组件向子组件传递数据时,会使用 props。 如果是多层级嵌套的组件,如何从一级传递到 3 级甚至更远呢。 若使用 props 则必须将其沿着组件链逐级传递下去,这会非常麻烦,所…...

【项目日记(七)】第三层: 页缓存的具体实现(上)

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:项目日记-高并发内存池⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你做项目   🔝🔝 开发环境: Visual Studio 2022 项目日…...

深入解剖指针篇(2)

目录 指针的使用 strlen的模拟实现 传值调用和传址调用 数组名的理解 使用指针访问数组 一维数组传参的本质 冒泡排序 个人主页(找往期文章):我要学编程(ಥ_ಥ)-CSDN博客 指针的使用 strlen的模拟实现 库函数strlen的功能是求字符串…...

【知识点】Java常用

文章目录 基础基础数据类型内部类Java IOIO多路复用重要概念 Channel **通道**重要概念 Buffer **数据缓存区**重要概念 Selector **选择器** 关键字final 元注解常用接口异常处理ErrorException JVM与虚拟机JVM内存模型本地方法栈虚拟机栈 Stack堆 Heap方法区 Method Area (JD…...

MySQL篇—迁移数据目录到新的本地路径

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…...

【FPGA】高云FPGA之IP核的使用->PLL锁相环

FPGA开发流程 1、设计定义2、设计输入3、分析和综合4、功能仿真5、布局布线6、时序仿真7、IO分配以及配置文件(bit流文件)的生成8、配置(烧录)FPGA9、在线调试 1、设计定义 使用高云内置IP核实现多路不同时钟输出 输入时钟50M由晶…...

程控设备和电脑通信的总线和协议选择

文章目录 程控设备都通过什么协议和总线和电脑通信?工控设备都使用什么通信协议与电脑通信?各种工控设备通信协议的优缺点如何选择适合工控设备的通信协议?各种工控设备通信总线的优缺点如何判断一种总线是否适合特定的应用场景?程控设备都通过什么协议和总线和电脑通信? …...

鸿蒙开发-UI-组件导航-Navigation

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 文章目录 目录 一、基本概念 二、页面显示模式 1.自适应模式 2.单页面模式 3.分栏模式 三、标题栏模式 1.Mini模式 2.Full模式 四、菜单栏 五、工具栏 六、案例 …...

Codeforces Round 922 (Div. 2)(A~D)补题

A题考虑贪心,要使使用的砖头越多,每块转的k应尽可能小,最小取2,最后可能多出来,多出来的就是最后一块k3,我们一行内用到的砖头就是 m 2 \frac{m}{2} 2m​下取整,然后乘以行数就是答案。 #inclu…...

Seata下载与配置、启动

目录 Seata下载Seata配置启动Seata Seata下载 首先,我们需要知道我们要使用哪个版本的seata,这就要查看spring-cloud-alibaba版本说明,找到我们对应的seata。 spring-cloud-alibaba版本说明: 地址链接 下面是部分版本说明: s…...

什么是TCP三次握手、四次挥手?

1、三次握手 你(客户端)给一个朋友(服务器)打电话,告诉他你想开始对话。这就像是发送一个SYN(同步序列编号)信号,表示你想开始建立连接。(client向server发送syn,seqx,此时client验证client发送能力正常。client置为SYN SENT状态)…...

C++程序在开机自启和定时器执行时遇到的问题和解决方法

遇到的错误如下: Camera is created.load vfvlog.[dll/so] failed for dll[/vfvlog.so] unexistedLoadDbgConfig, LoadFile fail, err:-3, errno: No such file or directoryqt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could not load the Qt platfo…...

R17 extended DRX(eDRX)

根据工业无线传感器的要求,电池至少可持续使用数年。 在NB-IoT和LTE eMTC中,也有类似的要求。 为了满足极长电池寿命的要求,NB-IoT和LTE eMTC在Release 13中为RRC IDLE UE引入了扩展DRX,在Release 16中为RRC INACTIVE UE引入了eDRX,上面是LTE 引入eDRX的背景。 一 概述 到…...

Debezium发布历史102

原文地址: https://debezium.io/blog/2021/02/24/debezium-1-5-beta1-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 1.5.0.Beta1 发布 2021 年 2 月 24 日 作者: Gu…...

探索自然语言处理在改善搜索引擎、语音助手和机器翻译中的应用

文章目录 每日一句正能量前言文本分析语音识别机器翻译语义分析自然语言生成情感分析后记 每日一句正能量 努力学习,勤奋工作,让青春更加光彩。 前言 自然语言处理(NLP)是人工智能领域中与人类语言相关的重要研究方向&#xff0c…...

echarts:获取省、市、区/县、镇的地图数据

目录 第一章 前言 第二章 获取地图的数据(GeoJSON格式) 2.1 获取省、市、区/县地图数据 2.2 获取乡/镇/街道地图数据 第一章 前言 需求:接到要做大屏的需求,其中需要用echarts绘画一个地图,但是需要的地图是区/县…...

Java_简单模拟实现ArrayList_学习ArrayList

文章目录 一、 了解线性表和顺序表区别1.线性表2.顺序表 二、模拟实现1.定义接口2.定义MyArrayList3.成员变量以及构造方法4.实现打印数组5.实现add方法6.实现查找某个数是否存在contains或者某个数的下标indexOf7.获取或更改pos位置的值 get和set8.获取数组大小 size9.删除某个…...

动手学深度学习(一)深度学习介绍2

目录 二、起源 三、深度学习的成功案例: 四、特点: 五、小结: 二、起源 为了解决各种各样的机器学习问题,深度学习提供了强大的工具。 虽然许多深度学习方法都是最近才有重大突破,但使用数据和神经网络编程的核心思…...

vmware网络配置,VMware的三种网络模式详解与配置

vmware为我们提供了三种网络工作模式 vmware为我们提供了三种网络工作模式, 它们分别是: Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 VMware虚拟机的三种网络类型的适用场景如下…...

【Ubuntu】安装hbase

前提 需要安装java 安装 HBase 下载并解压 HBase 安装包: wget https://dlcdn.apache.org/hbase/2.5.7/hbase-2.5.7-bin.tar.gz tar -zxvf hbase-2.5.7-bin.tar.gz配置 HBase 环境变量: export HBASE_HOME/path/to/hbase-2.5.7 export PATH$PATH:$H…...

ubuntu16.04环境轻松安装和应用opencv4.9.0(基于源码编译)

目录 一、环境准备 1、安装cmake 2、安装依赖 3、从github上下载opencv4.9.0.zip 二、安装opencv4.9.0 1、解压4.9.0.zip 2、进入build目录编译 3、安装编译好的相关库 4、修改opencv配置文件并使其生效 5、添加PKG_CONFIG路径,并使其生效 三、opencv环境…...

FastBee开源物联网平台2.0开源版发布啦!!!

一、项目介绍 物美智能(wumei-smart)更名为蜂信物联(FastBee)。 FastBee开源物联网平台,简单易用,更适合中小企业和个人学习使用。适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业控制等。 系统后端采用Spring boot;前端采用…...

【NeRF和NLP】一些观察感悟,碎碎念

NeRF的paper,有几个感想: NeRF读的时候感觉和diffusion思路特别像,训练目标是一个很小很小的子步骤,大大简化了训练难度NeRF建模的是“真实”世界,其用模型隐含的存储了真实世界的体素(场)模型…...

Python程序设计 基础数据类型

1.1 编程规范 注释 python注释也有自己的规范,在文章中会介绍到。注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的。 在说规范…...