【鸿蒙HarmonyOS NEXT】页面之间相互传递参数

2024-09-08 07:44

本文主要是介绍【鸿蒙HarmonyOS NEXT】页面之间相互传递参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数

  • 一、环境说明
  • 二、页面之间相互传参

一、环境说明

  1. DevEco Studio 版本:
    在这里插入图片描述

  2. API版本:以12为主
    在这里插入图片描述

二、页面之间相互传参

说明: 页面间的导航可以通过页面路由router模块来实现。页面路由模块根据页面url找到目标页面,从而实现跳转。通过页面路由模块,可以使用不同的url访问不同的页面,包括跳转到UIAbility内的指定页面、用UIAbility内的某个页面替换当前页面、返回上一页面或指定的页面等。

需求: 我们现在模拟用户从登录页面(如页面名称为LoginPage)调整到首页(HomePage),将用户登录信息传递给HomePage,当从HomePage返回到登录页面时也将HomePage的数据传递给LoginPage页面。

具体实现步骤如下

  1. 新建项目取名为pageparameter的工程,当工程被创建成功后,默认只有一个Index.ets页面。
  2. 将Index页面名称改成LoginPage,作为登录页面。
  3. 在main_pages.json中将原来的Index改成LoginPage。
  4. 修改LoginPage的UI布局,添加必要的几个UI组件测试。
  5. 新建HomePage页面,并添加几个必要的测试组件。
  6. 点击跳转按钮,从LoginPage跳转到HomePage,查看HomePage页面内容有无变化,并查看后台日志信息,查看有无页面传递参数。
  7. 点击返回上一页按钮,从LoginPage跳转到HomePage,查看后台日志信息,查看有无参数。

具体代码如下:
8. 项目结构如下截图所示:
在这里插入图片描述
9. LoginPage页面完整代码如下:

import { router } from '@kit.ArkUI';@Entry
@Component
struct Index {@State message: string = '登录页';@State btnMsg: string = '登录';@State account: string = ''; // 账号状态变量@State password: string = ''; // 密码状态变量@State isShowProgress: boolean = false; // 显示进度指示器的状态变量// 页面每次显示时都会调用该函数,这里用于测试接收页面传参onPageShow(): void {if (router.getParams() !== undefined && router.getParams() !== null) {let record = router.getParams() as Record<string, string>;if (record !== undefined && record !== null) {let msg = record['msg']console.info('接收到HomePage页面的参数:', msg)}}}build() {Column() {Text(this.message).id('HelloWorld').fontSize(20).fontWeight(FontWeight.Bold).width('100%').height(50).textAlign(TextAlign.Center).backgroundColor(0xF1F3F5)Image($r('app.media.startIcon')).width(150).height(150).margin({ top: 40, bottom: 40 })TextInput({ placeholder: '请输入手机号' }).maxLength(11)// 最大长度.type(InputType.Number)// 输入类型为数字.inputStyle()// 应用自定义样式.onChange((value: string) => {this.account = value; // 更新账号状态})Line().lineStyle() // 应用自定义Line样式// 密码输入框TextInput({ placeholder: '请输入密码' }).maxLength(12)// 最大长度.type(InputType.Password)// 输入类型为密码.inputStyle()// 应用自定义样式.onChange((value: string) => {// TODO: 生产环境需要使用正则表达式对手机号进行验证this.password = value; // 更新密码状态})Line().lineStyle() // 应用自定义Line样式Button(this.btnMsg).width('80%').margin({ top: 100 }).height(50).onClick(() => {if (this.account === undefined || this.account === '') {console.info('请输入账号')return}if (this.password === undefined || this.password === '') {console.info('请输入密码')return}router.pushUrl({url: 'pages/HomePage',params: {account: this.account,password: this.password}})})}.height('100%').width('100%').padding(0)}
}// TextInput组件的自定义样式扩展
@Extend(TextInput)
function inputStyle() {.placeholderColor(Color.Gray) // 占位符颜色.height(50) // 输入框高度.fontSize(15) // 字体大小.backgroundColor(0xF1F3F5) // 背景颜色.width('90%') // 宽度为父组件的100%.padding({ left: 12 }) // 左侧填充.margin({ top: 15 }) // 上方边距
}// Line组件的自定义样式扩展
@Extend(Line)
function lineStyle() {.width('100%') // 宽度为父组件的100%.height(1) // 高度.backgroundColor(0xF1F3F5) // 背景颜色
}
  1. HomePage页面完整代码如下:
import { Router, router } from '@kit.ArkUI';@Entry
@Component
struct HomePage {@State message: string = '首页';// 获取前一个页面传递过来的数据@State account: string = ''@State password: string = ''aboutToAppear(): void {if (router.getParams() !== undefined && router.getParams() !== null) {let record = router.getParams() as Record<string, string>;if (record !== undefined && record !== null) {this.account = record['account']this.password = record['password']console.info('接收到前一个页面的参数:', JSON.stringify(record))}}}build() {Column() {Text(this.message).fontSize(30).width('100%').height(50).textAlign(TextAlign.Center).backgroundColor(0xF1F3F5)Blank().height(120)Text(`接收到的用户名:${this.account}`).fontSize(20).width('100%').height(50).padding({ left: 12, right: 12 })Text(`接收到的密码:${this.password}`).fontSize(20).width('100%').height(50).padding({ left: 12, right: 12 })Button('返回上一页').width('80%').margin({ top: 100 }).height(50).onClick(() => {// 返回登录页面router.showAlertBeforeBackPage({message: '确认返回上一页吗?'})router.back({url: 'pages/LoginPage',params: {msg: 'homepage'}})})}.height('100%').width('100%')}
}

编译运行测试查看结果:

  1. 用户从登录页面(如页面名称为LoginPage)跳转到首页(HomePage),将用户登录的账号和密码进行传递,效果如下图所示:
    在这里插入图片描述
    输入账号和密码,点击登录,页面进行跳转,效果如下
    在这里插入图片描述

  2. 用户从首页(HomePage)返回到登录页面(LoginPage),并点击弹出中的【确定】按钮,将首页数据回传给登录页,效果如下图所示:
    在这里插入图片描述
    登录页面接收到的参数为:homepage

这篇关于【鸿蒙HarmonyOS NEXT】页面之间相互传递参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147526

相关文章

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用