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

news2024/9/20 0:32:35

【鸿蒙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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes微服务基础及类型

目录 1 什么是微服务 2 微服务的类型 3 ipvs模式 ipvs模式配置方式 4 微服务类型详解 4.1 ClusterIP 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 metalLB配合loadbalance实现发布IP 1 什么是微服务 用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&…

JavaWeb——JavaScript(3/4)-JS对象:BOM、DOM(Window、Location,概念、标准模型、获取元素对象)

目录 BOM 介绍 Window 案例(1) Location DOM 概念 标准模型 获取元素对象 案例(2) 原始代码 完整代码 JS对象 BOM 介绍 概念&#xff1a;Browser Object Model 浏览器对象模型&#xff0c;允许JavaScript与浏览器对话&#xff0c;JavaScript 将浏览器的各个组成部…

git 提交自动带上storyid

公司里的运维团队的产品经理&#xff0c;那老六提出说要在每个提交带上的jira storyid或者bugid&#xff0c;不用他自己弄不顾他人麻烦&#xff0c;真想问候他的xx。不过既然已经成为定局&#xff0c;还是想想有没有其他办法。经一番调研&#xff0c;网上有比较零碎的信息&…

攻防世界--->地穴

前言&#xff1a;学习笔记。 下载 解压 查壳。 64位ida打开。 进入主函数。 很容易得知&#xff0c;这是一个RC4加密。 【 &#xff08;题外话&#xff09; 在reverse中&#xff0c;RC4考点&#xff0c;不会很难。 reverse中RC4关键点就是&#xff0c;抓住异或。 一般解这种…

Open a folder or workspace... (File -> Open Folder)

问题&#xff1a;vscode Open with Live Server 时 显示Open a folder or workspace... (File -> Open Folder)报错 解决&#xff1a;不可以单独打开文件1.html ; 需要在文件夹里打开 像这样

【哈希表】深入理解哈希表

目录 1、哈希表简介2、哈希函数2.1、概念2.2、常用的哈希函数2.2.1、直接定址法2.2.2、除留余数法2.2.3、平方取中法2.2.4、基数转换法 3、哈希冲突3.1、概念3.2、开放地址法【闭散列&#xff1a;key存放到冲突位置的“下一个”空位置】3.3、链地址法【开散列&#xff1a;冲突位…

SAM 2:分割图像和视频中的任何内容

文章目录 摘要1 引言2 相关工作3 任务&#xff1a;可提示视觉分割4 模型5 数据5.1 数据引擎5.2 SA-V数据集 6 零样本实验6.1 视频任务6.1.1 提示视频分割6.1.2 半监督视频对象分割6.1.3 公平性评估 6.2 图像任务 7 与半监督VOS的最新技术的比较8 数据和模型消融8.1 数据消融8.2…

dr 航迹推算 知识介绍

DR&#xff08;Dead Reckoning&#xff09;航迹推算是一种在航海、航空、车辆导航等领域中广泛使用的技术&#xff0c;用于估算物体的位置。DR航迹推算主要通过已知的初始位置和运动参数&#xff08;如速度、方向&#xff09;来预测物体的当前位置。以下是 DR 航迹推算的详细知…

跨平台电商数据整合:item_get API在电商大数据平台中的角色

在电商行业蓬勃发展的今天&#xff0c;跨平台运营已成为众多商家的必然选择。然而&#xff0c;随之而来的数据孤岛问题却成为了制约电商企业进一步发展的瓶颈。为了解决这一问题&#xff0c;电商大数据平台应运而生&#xff0c;而item_get API作为获取商品详情的关键接口&#…

统计学第6天

1、变量间关系的度量 函数关系 &#xff08;1&#xff09;是一一对应的确定关系&#xff1b; &#xff08;2&#xff09;设有两个变量x和y&#xff0c;变量y随x一起变化&#xff0c;并完全依赖于x,当x取某个数值时&#xff0c;y根据确定的关系取相应的值&#xff0c;称y是x的…

建设网盘聚合中心—Win10+Alist+RaiDrive

经常需要在网上找各种资源&#xff0c;但遇到 2 个问题&#xff1a; 1. 大部分网盘都需要先将文件保存在自己网盘后才能下载&#xff0c;也就是必须创建对应网盘账号。 2. 有些网盘还必须要下载客户端才能下载文件。 创建账号无法避免&#xff0c;但可以不用下载那么多的客户端…

写在 Pencils Protocol TGE 前:加密市场共识才是王道,拥抱社区

“Pencils Protocol 正在成为本轮市场周期中&#xff0c;加密项目建立共识最有力的工具&#xff01;” 对于加密项目而言&#xff0c;代币 TGE 是一个非常重要的事情&#xff0c;它不仅仅意味着生态内经济系统的全面启动&#xff0c;同时也意味着项目生态市场的全面开启。当然…

《Rust避坑式入门》第1章:挖数据竞争大坑的滥用可变性

赵可菲是一名Java程序员&#xff0c;一直在维护一个有十多年历史的老旧系统。这个系统即将被淘汰&#xff0c;代码质量也很差&#xff0c;每次上线都会出现很多bug&#xff0c;她不得不加班修复。公司给了她3个月的内部转岗期&#xff0c;如果转不出去就会被裁员。她得知公司可…

AF透明模式/虚拟网线模式组网部署

透明模式组网 实验拓扑 防火墙基本配置 接口配置 eth1 eth3 放通策略 1. 内网用户上班时间&#xff08;9:00-17:00&#xff09;不允许看视频、玩游戏及网上购物&#xff0c;其余时 间访问互联网不受限制&#xff1b;&#xff08;20 分&#xff09; 应用控制策略 2. 互联…

二维空间向量的p范数等密度轨迹

图2-52&#xff1a;二维空间向量的 ℓ p \ell p ℓp范数等密度轨迹。 想过两种方式&#xff0c;还是放在一起省地方。 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》 禹晶、肖创柏、廖庆敏《数字图像处理》资源…

数据库系统原理及应用——仓库管理系统

目录 引言 一.需求设计说明书 1&#xff0e;需求分析 2.系统背景 3.系统目标 4.人员分配 5.数据流程图&#xff08;DFD&#xff09; 二.概念结构设计 1.局部E-R图 &#xff08;1&#xff09;供应商 &#xff08;2&#xff09;货物 &#xff08;3&#xff09;客户 &…

1-19 平滑处理——双边滤波 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 cv2.bilateralFilter函数用于对图像进行双边滤波。双边滤波是一种保持边缘的平滑技术&#xff0c;常用于图像去噪声和增强图像的细节。函数的四个参数如下&#xff1a; 三、运行现象 四、完整工程贴出 一、提前准备 1、树莓派4B 及 64位系统…

stack smashing detect以及解决之道

0. 简介 相较于其他报错&#xff0c;stack smashing detect这个报错是最令人头疼的段错误种类。“Stack smashing detect” 是指在程序运行过程中检测到栈溢出的情况。栈溢出是一种常见的安全漏洞&#xff0c;发生在程序尝试往栈空间写入超过其边界范围的数据时。 1. 常见分类…

改写二进制文件

以下是一些常见的方法和工具&#xff1a; 1. 使用十六进制编辑器 十六进制编辑器 是最直接的工具之一&#xff0c;用于查看和编辑二进制文件中的数据。它允许你以十六进制格式查看和修改文件内容。 常见十六进制编辑器&#xff1a; HxD&#xff08;Windows&#xff09;Hex F…

铁路订票系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;车次信息管理&#xff0c;基础数据管理&#xff0c;论坛管理&#xff0c;通知公告管理&#xff0c;用户管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页&a…