鸿蒙4.0开发笔记之ArkTS语法基础之数据传递与共享详细讲解(十八)

文章目录

    • 一、路由数据传递(router)
      • 1、路由数据传递定义
      • 2、路由数据传递使用方法
      • 3、数据传递两个页面的效果
    • 二、页面间数据共享(EntryAbility)
      • 1、定义
      • 2、实现案例
      • 3、避坑点
    • 三、数据传递练习

一、路由数据传递(router)

1、路由数据传递定义

即使用router.pushUrl进行路由跳转,从而实现页面间的数据传递。这个方法可以实现一个页面向另一个指定页面的数据传递和共享。

2、路由数据传递使用方法

(1)例如在LifeCircle页面的Build()组件下创建一个页面跳转的按钮,实现页面跳转,

		//验证页面跳转的数据传递按钮Button('页面跳转')

(2)在按钮中创建点击事件,点击事件内容就是使用router.pushUrl()进行页面跳转,跳转到另外一个新建的页面“pages/LifeCircle2”中。并且跳转时携带一个对象数据,包含有id、name、age3个数据元素。

			//创建点击事件.onClick(()=>{//调用路由函数,进行页面的跳转,除了路径,同时带有一个对象,包括三个键值对元素router.pushUrl({url:"pages/LifeCircle2",params: {id:'001',name:'页面壹',age:25}})})

(3)在另外一个页面LifeCircle2中接收数据,获取跳转对象的数据,利用键值对的键名进行取值。

let pageID = router.getParams()['id'] as string
let pageName = router.getParams()['name']
let pageAge = router.getParams()['age']

(4)最后在第二个页面LifeCircle2呈现从其他页面获取的数据。

Divider()
Text(pageID).fontSize(40).backgroundColor(Color.Yellow)
Text(pageName).fontSize(40).backgroundColor(Color.Yellow)
Text(pageAge).fontSize(40).backgroundColor(Color.Yellow)

(5)在第二个页面LifeCircle2内创建返回按钮和返回路由函数调用。

//验证页面跳转的数据传递按钮Button('点击返回')//创建点击事件.onClick(() => {//调用路由函数,进行页面的跳转,除了路径,同时带有一个对象,包括三个键值对元素router.back()})

3、数据传递两个页面的效果

LifeCircle效果:
01
LifeCircle2效果:
02

二、页面间数据共享(EntryAbility)

1、定义

这是一种全局的数据共享方法,可以在所有页面之间进行数据共享。实现方法就是在EntryAbility.ts文件中使用AppStorage.SetOrCreate()进行数据的定义,这个数据就可以在这个项目所有的页面中进行数据获取,通过AppStorage.Get()获取。

2、实现案例

(1)首先在roject/entry/src/main/ets/entryability/EntryAbility.ts文件中定义一个数据:
03
(2)然后在LifeCircle中进行数据获取:
04

3、避坑点

Previewer预览器中无法显示效果,因为在预览该页面时,EntryAbility.ts文件还没有执行,因此无法获取到页面之间共享的数据。
在这里插入图片描述
解决方法:使用本地模拟器、真机模拟器或者远程模拟器(建议),记得将默认的启动页面修改为需要调试的页面。如何修改请参考文章:HarmonyOS 修改App的默认加载的界面(ArkTS版本)本次使用的华为官方的远程模拟器,这样就可以看到效果了:
在这里插入图片描述

三、数据传递练习

1、EntryAbility页面
05
2、LifeCircle页面

import router from '@ohos.router'//在应用程序的各个页面中取出由EntryAbility定义的共享数据:使用AppStorage.Get
let name:string = AppStorage.Get('AppName')@Entry
@Component
struct LifeCircle {//调用从EntryAbility中获取的数据赋值给message,并在后方用Text呈现@State message: string = name@State isAppear:boolean = truebuild() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Divider()Button('显示/隐藏子组件').backgroundColor(Color.Orange).onClick(()=>{this.isAppear = !this.isAppear})if(this.isAppear){LifeCircle_son()}//验证页面跳转的数据传递按钮Button('页面跳转')//创建点击事件.onClick(()=>{//调用路由函数,进行页面的跳转,除了路径,同时带有一个对象,包括三个键值对元素router.pushUrl({url:"pages/LifeCircle2",params: {id:'001',name:'页面壹',age:25}})})}.width('100%')}.height('100%')}//页面显示onPageShow(){//打印出页面显示的提醒console.log('LifeCircle1: Page is onPageShow')}//页面隐藏onPageHide(){//打印出页面隐藏的提醒console.log('LifeCircle1: Page is onPageHide')}//页面返回:手机按钮上的返回onBackPress(){//打印出页面返回的提醒console.log('LifeCircle1: Page is onBackPress')}//aboutToAppear和aboutToDisappear也可以放在入口组件中,后者表示程序被sha死时调用的函数//组件即将出现时回调该接⼝aboutToAppear(){console.log('LifeCircle1: Page is 入口aboutToAppear')}//组件析构销毁时触发的函数aboutToDisappear(){console.log('LifeCircle1: Page is 入口aboutToDisappear')}
}//子组件的内容
@Component
struct LifeCircle_son{build(){Column(){Text('页面1子组件内容').fontSize(40).fontStyle(FontStyle.Italic)}}//组件即将出现时回调该接⼝aboutToAppear(){console.log('LifeCircle1: Page is 子组件aboutToAppear')}//组件析构销毁时触发的函数aboutToDisappear(){console.log('LifeCircle1: Page is 子组件aboutToDisappear')}
}

3、LifeCircle2页面

import router from '@ohos.router';
//获取跳转对象的数据:利用键值对的键名进行取值
//从其他页面接收的数据不知道其变量,暂时作为string接收
let pageID = router.getParams()['id'] as string
let pageName = router.getParams()['name']
let pageAge = router.getParams()['age']@Entry
@Component
struct LifeCircle2 {@State message: string = 'Hello World'@State isAppear:boolean = truebuild() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Divider()Button('显示/隐藏子组件').backgroundColor(Color.Orange).onClick(() => {this.isAppear = !this.isAppear})if (this.isAppear) {LifeCircle_son()}//在第二个页面使用从其他页面获取的数据Divider()Text(pageID).fontSize(40).backgroundColor(Color.Yellow)Text(pageName).fontSize(40).backgroundColor(Color.Yellow)Text(pageAge).fontSize(40).backgroundColor(Color.Yellow)//验证页面跳转的数据传递按钮Button('点击返回')//创建点击事件.onClick(() => {//调用路由函数,进行页面的跳转,除了路径,同时带有一个对象,包括三个键值对元素router.back()})}.width('100%')}.height('100%')}//页面显示onPageShow(){//打印出页面显示的提醒console.log('LifeCircle2: Page is onPageShow')}//页面隐藏onPageHide(){//打印出页面隐藏的提醒console.log('LifeCircle2: Page is onPageHide')}//页面返回:手机按钮上的返回onBackPress(){//打印出页面返回的提醒console.log('LifeCircle2: Page is onBackPress')}//aboutToAppear和aboutToDisappear也可以放在入口组件中,后者表示程序被sha死时调用的函数//组件即将出现时回调该接⼝aboutToAppear(){console.log('LifeCircle2: Page is 入口aboutToAppear')}//组件析构销毁时触发的函数aboutToDisappear(){console.log('LifeCircle2: Page is 入口aboutToDisappear')}
}//子组件的内容
@Component
struct LifeCircle_son{build(){Column(){Text('页面2子组件内容').fontSize(40).fontStyle(FontStyle.Italic)}}//组件即将出现时回调该接⼝aboutToAppear(){console.log('LifeCircle2: Page is 子组件aboutToAppear')}//组件析构销毁时触发的函数aboutToDisappear(){console.log('LifeCircle2: Page is 子组件aboutToDisappear')}
}

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

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

相关文章

PaaS(平台即服务)——云计算服务模型(特点,应用场景,优点和缺点,示例)

PaaS(平台即服务)是云计算的一种服务模型,它提供了一个平台,允许客户开发、运行和管理应用程序,而无需建立和维护通常与这些过程相关的复杂基础设施。PaaS 是作为服务交付的一种方式,它提供了一套工具和服务…

网卡学习资料整理

GMAC网卡相关介绍与分析 https://www.cnblogs.com/forwards/p/17101438.html https://www.eefocus.com/article/1635234.html Linux Phy 驱动解析_linux phy驱动-CSDN博客 GMAC接口五篇 https://blog.csdn.net/dkmknjk/category_11837422.html 以太网扫盲(一&am…

麒麟V10服务器安装Apache+PHP

安装PHP yum install php yum install php-curl php-gd php-json php-mbstring php-exif php-mysqlnd php-pgsql php-pdo php-xml 配置文件 /etc/php.ini 修改参数 date.timezone Asia/Shanghai max_execution_time 60 memory_limit 1280M post_max_size 200M file_upload…

分布式和微服务区别

1.分布式 微服务和分布式的区别 1.将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。 2.分布式是否属于微服务? 答案是肯定的。微服务的意…

动手制作个人电脑对话机器人transformers+DialoGPT

简介:DialoGPT是一个对话模型,由微软基于GPT-2训练。由于DialoGPT在对话数据上进行了预训练,所以它比原始的GPT-2更擅长生成类似对话的文本。DialoGPT的主要目标是生成自然且连贯的对话,而不是在所有情况下都提供事实上的正确答案…

基于Spring、SpringMVC、MyBatis开发的游乐场管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring、SpringMVC、MyBatis开发的游…

ca单点登录

最近搞得单点登录碰到了很多问题,具体的问题有如下几个: ①如何获取usbkey的值 ②要实现的单点登录的方案 ③如何获取多个key的值,并进行选择登录 ④ie跳谷歌访问业务界面 注:最后将实现代码附上,希望对大家有所帮助 1…

Numpy数组的运算(第7讲)

Numpy数组的运算(第7讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

进制 + 原码,反码,补码

进制转换 整数部分 小数部分 原码 反码 补码 原码转补码: 左边和右边第一个1不变,中间取反。-0 除外。 计算机系统中数值一律用补码来存储的原因 其他 术语 进制表 进制数的表示 详细教程可转 爱编程的大丙

数学建模-数据新动能驱动中国经济增长的统计研究-基于数字产业化和产业数字化的经济贡献测度

数据新动能驱动中国经济增长的统计研究-基于数字产业化和产业数字化的经济贡献测度 整体求解过程概述(摘要) 伴随着数据要素化进程的不断加深,对于数据如何作用于经济发展,数据与其他要素结合产生的动能应该如何测度的研究愈发重要。本文将数据新动能分…

sql 条件统计,count+if+sum

1,前提 看同事写的sql语句时,觉得他写的这个countsumif的sql还挺新鲜, 学习记录下,感觉这个挺适合用来对历史数据做条件统计 2,count使用结果 select count(0);//1select count(1);//1select count(null);//0select…

机器人刚性碰撞任务的阻抗控制性能

问题描述 对于机器人刚性碰撞任务,阻抗控制可以有效地提高机器人的适应性和稳定性。 在刚性碰撞任务中,机器人在接触外部物体时需要快速适应并调整自身的运动轨迹和速度,以实现精确的操控和稳定的交互。阻抗控制可以通过调整机器人的阻抗参…

【Flink系列五】Checkpoint及Barrier原理

本章内容 一致性检查点从检查点恢复状态检查点实现算法-barrier保存点Savepoint状态后端(state backend) 本文先设置一个前提,流处理的数据都是可回放的(可以理解成消费的kafka的数据) 一致性检查点(che…

深度学习之注意力机制

注意力机制与外部记忆 注意力机制与记忆增强网络是相辅相成的,神经网络去从内存中或者外部记忆中选出与当前输入相关的内容时需要注意力机制,而在注意力机制的很多应用场景中,我们的外部信息也可以看作是一个外部的记忆 这是一个阅读理解任务…

Nodejs安装使用,nvm对Nodejs和npm版本控制

Nodejs 安装 使用: npm 是Nodejs的内置 包管理工具 下载长期支持版本Node.js 中文网Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全…

Flink之JDBCSink连接MySQL

输出到MySQL 添加依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc</artifactId><version>3.1.0-1.17</version> </dependency> <dependency><groupId>com.mysql</gr…

在pytorch中自定义dataset读取数据

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 有关我们数据读取预训练 以及如何将它打包成一个一个batch输入我们的网络的 首先我们来看一下之前我们在讲resnet网络时所使用的源码 我们去使用了官方实现的image folder去读取我们的图像数据 然…

xilinx的XVC协议

文章目录 概述JTAG工作方式XVC协议 其他Debug Bridge IP 概述 JTAG工作方式 XVC协议 其他 Debug Bridge IP

Python正则表达式指南

正则表达式指南 摘要 本文是关于在 Python 中通过 re 模块使用正则表达式的入门教程。它提供了比“标准库参考”的相关章节更平易的介绍。 引言 正则表达式&#xff08;Regular expressions&#xff0c;也叫 REs、 regexs 或 regex patterns&#xff09;&#xff0c;本质上…

设计模式基础——概述(1/2)

目录 一、设计模式的定义 二、设计模式的三大类别 三、设计模式的原则 四、主要设计模式目录 4.1 创建型模式&#xff08;Creational Patterns&#xff09; 4.2 结构型模式&#xff08;Structural Patterns&#xff09; 4.3 行为型模式&#xff08;Behavioral Patterns&…