鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍
Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。
官网文档地址:文档中心
本案例代码运行环境是API17
2. 案例代码
下面是基于官网示例代码修改而成的:
import { Gouwuche } from './Gouwuche';
@Entry
@Component
struct NavigationExample {private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];@Provide pageInfo: NavPathStack = new NavPathStack();@State message: string = '';
@BuilderNavigationTitle() {Column() {Text('Title').fontColor('#182431').fontSize(35).lineHeight(41).fontWeight(700)if (this.message) {Text('子页面返回数据=' + this.message).fontColor('#182431').fontSize(16).lineHeight(19).opacity(0.4).margin({ top: 2, bottom: 20 })}}.alignItems(HorizontalAlign.Start)}
@BuilderNavigationMenus() {Row({ space: 15 }) {Image($r('app.media.ic_public_add')).width(24).height(24).fillColor('#ic_public_add').onClick(() => {this.pageInfo.pushPathByName('Gouwuche', '18022223333', (info) => {//接收返回值this.message = info.result as string});})Image($r('app.media.ic_public_more')).width(24).height(24).fillColor('#ic_public_add')}.margin({ top: 10 })}
@BuilderPagesMap(name: string) {if (name == 'Gouwuche') {Gouwuche()}}
build() {Column() {Navigation(this.pageInfo) {TextInput({ placeholder: 'search...' }).width('100%').height(40).backgroundColor('#FFFFFF').margin({ top: 8 })
List({ space: 12, initialIndex: 0 }) {ForEach(this.arr, (item: number) => {ListItem() {Text('' + item).width('100%').height(72).backgroundColor('#FFFFFF').borderRadius(24).fontSize(16).fontWeight(500).textAlign(TextAlign.Center)}}, (item: number) => item.toString())}.layoutWeight(1).width('100%').alignListItem(ListItemAlign.Center).scrollBar(BarState.Off) //关闭滚动条.margin({ top: 12 })}.navDestination(this.PagesMap) //创建NavDestination组件。使用builder函数,基于name和param构造NavDestination组件.title(this.NavigationTitle) //设置页面标题.menus(this.NavigationMenus) //设置页面右上角菜单。不设置时不显示菜单项.titleMode(NavigationTitleMode.Full) // 设置页面标题栏显示模式.hideTitleBar(false, true) //设置是否隐藏标题栏.hideToolBar(false, true) //设置是否隐藏工具栏.mode(NavigationMode.Auto) //设置导航栏的显示模式,支持单栏(Stack)、分栏(Split)和自适应(Auto)}.width('100%').height('100%').backgroundColor('#F1F3F5')}
}
Gouwuche.ets文件代码如下:
@Component
export struct Gouwuche {@State message: string = '购物车';@Consume pageInfo: NavPathStack
aboutToAppear(): void {this.message = `${this.pageInfo.getParamByName('Gouwuche')}`}
build() {NavDestination() {Column() {Row() {Text(this.message).fontSize(30)Button('返回上一页').onClick(() => {this.pageInfo.pop('hello:鸿蒙你好!')})}}.width('100%').height('100%').backgroundColor('#ff77f8bd')}}
}
实验现象:
-
点击页面右上角的加号,会跳转到【Gouwuche】页面,并且显示上一个页面传来的参数:18022223333
-
点击【Gouwuche】页面中的【返回上一页】的按钮,页面跳转回第一个页面,并且将字符【hello:鸿蒙你好!】传递给第一个页面了
通过上面实验,我们可以学会以下知识点
-
页面之间如何通过
Navigation
组件进行跳转 -
页面跳转时,如何来回传递数据
3. 实战
3.1. 需求
-
定义登录和注册页面,然后登录页面点击注册按钮,跳转到注册页面
-
注册页面输入账号和密码后,点击注册按钮,页面立马跳转到登录页面
-
登录页面显示刚注册的账号和密码信息
3.2. 编码
登录页面代码如下:
import { RegisterPage } from './RegisterPage';
/*** 登录页面*/
@Entry
@Component
struct LoginPage {@Provide pageInfo: NavPathStack = new NavPathStack();@State registerInfo: string = '';
@BuilderPagesMap(name: string) {if (name == 'Register') {RegisterPage()}}
build() {Navigation(this.pageInfo) {Column({ space: 20 }) {
TextInput({ placeholder: '请输入登录账号' }).width('90%').backgroundColor('#ffdddddd')
TextInput({ placeholder: '请输入登录密码' }).width('90%').backgroundColor('#ffdddddd')
Row({ space: 20 }) {Button('登录')Button('注册').onClick(() => {this.pageInfo.pushPathByName('Register', '', (info) => {//接收返回值this.registerInfo = info.result as string});})}
//显示注册账号密码信息if (this.registerInfo) {Text(this.registerInfo).fontSize(16)}}}.title('登录页面').navDestination(this.PagesMap)
}
}
页面预览效果如下:
注册页面代码如下:
/** * 注册页面*/
@Component
export struct RegisterPage {@State username: string = ''; //登录账号@State password: string = ''; //登录密码@Consume pageInfo: NavPathStack
build() {NavDestination() {Column({ space: 15 }) {TextInput({ placeholder: '请输入登录账号' }).width('90%').backgroundColor('#ffdddddd').onChange((value: string) => {this.username = value;})
TextInput({ placeholder: '请输入登录密码' }).width('90%').backgroundColor('#ffdddddd').onChange((value: string) => {this.password = value;})
Row() {Button('注册').onClick(() => {this.pageInfo.pop('账号:' + this.username + ',密码:' + this.password)})}}.width('100%').height('100%')}.title('注册页面')}
}
页面效果如下图所示:
点击注册按钮后,会立马跳转到登录按钮,如下:
小结
大家也可以做一些其他页面跳转的测试,页面之间也可以写到对象参数,转成JSON串进行传递,然后接收方再转成对象即可,大家可以参考官网API多做尝试!
相关文章:

鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...

CMS内容管理系统的设计与实现:多站点模式的实现
在一套内容管理系统中,其实有很多站点,比如企业门户网站,产品手册,知识帮助手册等,因此会需要多个站点,甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...

ZYNQ学习记录FPGA(二)Verilog语言
一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...
基于Uniapp的HarmonyOS 5.0体育应用开发攻略
一、技术架构设计 1.混合开发框架选型 (1)使用Uniapp 3.8版本支持ArkTS编译 (2)通过uni-harmony插件调用原生能力 (3)分层架构设计: graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...

五、jmeter脚本参数化
目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...

python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...

C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...
python打卡day49@浙大疏锦行
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...
手动给中文分词和 直接用神经网络RNN做有什么区别
手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动)…...

C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...

Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...

Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...
Docker、Wsl 打包迁移环境
电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.2609…...