HarmonyOS父子组件传递参数

HarmonyOS父子组件传递参数

1. 使用@State@Prop进行父子组件传递———注意是单向同步

@Prop装饰器:父子单向同步

  • 注意:只支持单向同步,同时也只能支持string\number\boolean\enum比较简单的类型。
    在这里插入图片描述

代码

// 使用 props 进行父子组件传值
@Component
struct SonCom {// 父子间传递过来的数据使用 @Prop 进行接受@Prop sonCar: string// 修改传递的参数changeInfo = (info: string)=> {}build() {Column() {Text(`这是子组件的盒子--- ${this.sonCar}`)Button('子组件修改父组件的数据').onClick((event: ClickEvent) => {this.changeInfo('吉利银河 L7 ----' + Math.ceil(Math.random() * 10))})}.width('100%').height(100).backgroundColor(Color.Orange)}
}@Entry
@Component
struct PropsPage {@State info: string = '比亚迪 宋'changeInfo = (newInfo: string)=>{this.info = newInfo}build() {Column({space: 20}) {Text(`这是父组件的盒子 ${this.info}`)Button('修改父组件的数据').onClick((event: ClickEvent) => {this.info = '领克 08---' + Math.ceil(Math.random() * 10)})// 这是子组件SonCom({sonCar: this.info,changeInfo: this.changeInfo})}.width('100%').height(300).backgroundColor(Color.Pink)}
}

演示
在这里插入图片描述

2. @Link装饰器:父子双向同步

@Link装饰器:父子双向同步

  • 注意
    在这里插入图片描述
// 子组件
@Component
struct ChildCom {@Link list: number[]build() {Column() {List({space: 10}) {ForEach(this.list, (item: number, index) => {ListItem() {Text(item.toString()).width('100%').padding(10).backgroundColor(Color.White)}})}}.onClick(() => {this.list.push(this.list.length + 1)})}
}// 父组件
@Entry
@Component
struct StateLink {@State list: number[] = [1, 2, 3]build() {Column() {ChildCom({// 注意,这里调用时,使用$替换this,这是语法规定list: $list})}.width('100%').height('100%').backgroundColor(Color.Gray)}
}

在这里插入图片描述

3. @Provide装饰器和@Consume装饰器:与后代组件双向同步

@Provide装饰器和@Consume装饰器:与后代组件双向同步

  • 注意@Consume装饰的变量通过相同的属性名绑定其祖先组件@Provide装饰的变量,在这里就是SunziCom中的@Consume listInfo: ListItemClass与祖先组件ProvideConsume中的@Provide listInfo: ListItemClass属性名保持一致。
// 这是模拟的数据
@Observed
class ListItemClass {name: stringlikeNum: numberisLike: booleancomment: stringconstructor(name: string, likeNum: number, isLike: number, comment: string) {this.name = namethis.likeNum = likeNumthis.isLike = isLike === 0 ? false : truethis.comment = comment}
}// 这是 孙子组件
@Component
struct SunziCom {// 注意:这里的属性名要保持和 @Provide修饰的父组件属性名一致.@Consume listInfo: ListItemClassbuild() {Column() {Text(this.listInfo.name).fontSize(18).fontWeight(700).fontColor('#333').margin({bottom: 10})Row() {Text(this.listInfo.comment)Row() {Text(this.listInfo.likeNum.toString()).fontColor(this.listInfo.isLike ? Color.Red : '#333')}.onClick(() => {if (this.listInfo.isLike) {this.listInfo.likeNum -= 1} else {this.listInfo.likeNum += 1}this.listInfo.isLike = !this.listInfo.isLike})}.justifyContent(FlexAlign.SpaceBetween).width('100%')}.padding(10).borderRadius(10).alignItems(HorizontalAlign.Start).width('100%').backgroundColor(Color.White)}
}
// 这是 儿子组件
@Component
struct ErziCom {build() {SunziCom()}
}@Entry
@Component
struct ProvideConsume {@Provide listInfo: ListItemClass = new ListItemClass(`小火车况且况且-${Math.ceil(Math.random() * 10)}`, Math.ceil(Math.random() * 100), Math.floor(Math.random() * 2), `这是随机的评论--${Math.ceil(Math.random() * 1000)}`)build() {Column(){ErziCom()}}
}

在这里插入图片描述

4. 使用@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化,主要是可以处理Link遇上ForEach而导致一些奇怪的问题

@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

// 这是模拟的数据
@Observed
class ListItemClass {name: stringlikeNum: numberisLike: booleancomment: stringconstructor(name: string, likeNum: number, isLike: number, comment: string) {this.name = namethis.likeNum = likeNumthis.isLike = isLike === 0 ? false : truethis.comment = comment}
}function createData() {return [new ListItemClass(`小火车况且况且-${Math.ceil(Math.random() * 10)}`, Math.ceil(Math.random() * 100), Math.floor(Math.random() * 2), `这是随机的评论--${Math.ceil(Math.random() * 1000)}`),new ListItemClass(`小火车况且况且-${Math.ceil(Math.random() * 10)}`, Math.ceil(Math.random() * 100), Math.floor(Math.random() * 2), `这是随机的评论--${Math.ceil(Math.random() * 1000)}`),new ListItemClass(`小火车况且况且-${Math.ceil(Math.random() * 10)}`, Math.ceil(Math.random() * 100), Math.floor(Math.random() * 2), `这是随机的评论--${Math.ceil(Math.random() * 1000)}`),new ListItemClass(`小火车况且况且-${Math.ceil(Math.random() * 10)}`, Math.ceil(Math.random() * 100), Math.floor(Math.random() * 2), `这是随机的评论--${Math.ceil(Math.random() * 1000)}`)]
}// 子组件
@Component
struct ChildCom {@ObjectLink listInfo: ListItemClassbuild() {Column() {Text(this.listInfo.name).fontSize(18).fontWeight(700).fontColor('#333').margin({bottom: 10})Row() {Text(this.listInfo.comment)Row() {Text(this.listInfo.likeNum.toString()).fontColor(this.listInfo.isLike ? Color.Red : '#333')}.onClick(() => {if (this.listInfo.isLike) {this.listInfo.likeNum -= 1} else {this.listInfo.likeNum += 1}this.listInfo.isLike = !this.listInfo.isLike})}.justifyContent(FlexAlign.SpaceBetween).width('100%')}.padding(10).borderRadius(10).alignItems(HorizontalAlign.Start).width('100%').backgroundColor(Color.White)}
}// 父组件
@Entry
@Component
struct ObservedObjectLink {@State list: ListItemClass[] = createData()build() {Column() {List({space: 10}) {ForEach(this.list, (item: ListItemClass, index: number) => {ListItem() {ChildCom({listInfo: item})}})}}.padding(10).width('100%').height('100%').backgroundColor(Color.Gray)}
}

在这里插入图片描述

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

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

相关文章

Python爬虫介绍

Python 作为一种广泛应用的编程语言,在 Web 开发、大数据开发、人工智能开发和嵌入式开发等领域都有着重要的应用。 Python 的易学性、清晰性和可移植性等特点使它得到很多技术人士的喜爱。对于数据科学和机器学习领域的程序员来说,Python 提供了强大的…

朴素贝叶斯案例

一、朴素贝叶斯算法: 朴素贝叶斯算法,是一种基于贝叶斯定理与特征条件独立假设的分类方法,基于贝叶斯后验概率建立的模型,它用于解决分类问题。朴素:特征条件独立;贝叶斯:基于贝叶斯定理。属于…

【Python】已解决:ModuleNotFoundError: No module named ‘paddle’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:ModuleNotFoundError: No module named ‘paddle’ 一、分析问题背景 在Python编程中,ModuleNotFoundError是一个常见的错误,它通常发生…

C语言中的进制转换

基础概念 进制又称数制,是指用一组固定的符号和统一的规则来表示数值的方法,在C语言中,可以使用不同的前缀来表示不同的进制: 二进制:以0b或0B为前缀(部分编译器可能不支持)八进制&#xff1a…

【论文精读】分类扩散模型:重振密度比估计(Revitalizing Density Ratio Estimation)

文章目录 一、文章概览(一)问题的提出(二)文章工作 二、理论背景(一)密度比估计DRE(二)去噪扩散模型 三、方法(一)推导分类和去噪之间的关系(二&a…

LVGL8.3动画图像(太空人)

LVGL8.3 动画图像 1. 动画图像本质 我们知道电影属于视频,而电影的本质是将一系列动作的静态图像进行快速切换而呈现出动画的形式,也就是说动画本质是一系列照片。所以 lvgl 依照这样的思想而定义了动画图像,所以在 lvgl 中动画图像类似于普…

能理解你的意图的自动化采集工具——AI和爬虫相结合

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…

浅聊Cookie

前言 在客户端使用Nuxt的useFetch调用接口并存储cookie&#xff0c;发现一些趣事~ cookie存储需要遵守同源策略~ 理论我们是知道的&#xff0c;但具体是怎么一回事呢~ 实现 在Nuxt中是这样的~ 直接访问 Nuxt <template><div>{{ data }}</div> </te…

【python】python学生成绩数据分析可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

c#使用自带库对字符串进行AES加密、解密

文章目录 1 代码1.1 定义Aes加密类块1.2 在主函数中调用 2 获取Key和IV2.1 基本方法2.2 自定义Key2.3 技术方面的原理 参考文章&#xff1a; C#软件加密实例&#xff1f; 。 参考官文&#xff1a; Aes 类。 在使用C#的自带的System.Security.Cryptography.Aes模块进行加密和解…

Spdlog日志库的安装配置与源码解析(Linux)

为什么使用日志库而不是控制台输出&#xff1f; 日志库通常提供了更丰富的功能&#xff0c;比如可以设置日志输出级别、输出到不同的目标&#xff08;比如控制台、文件、网络等&#xff09;&#xff0c;以及格式化输出等。 使用日志库可以使代码更易于维护。通过统一的日志接口…

Opencv学习项目2——pytesseract

上一次我们使用pytesseract.image_to_boxes来检测字符&#xff0c;今天我们使用pytesseract.image_to_data来检测文本并显示 实战教程 和上一次一样&#xff0c;添加opencv-python和pytesseract库 首先我们先来了解一下pytesseract.image_to_data pytesseract.image_to_data(…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇入口切换SMB共享WMI管道DCOM组件Impacket套件CS插件

红队内网攻防渗透 1. 内网横向移动1.1 WMI进行横向移动1.1.1 利用条件:1.1.1 利用详情1.1.1.1 wmic1.1.1.1.1 正向shell上线1.1.1.1.2 反向shell上线1.1.1.2 cscript(不建议使用)1.1.1.3 wmiexec-impacket1.1.1.4 cs插件1.2 SMB横向移动1.2.1 利用条件:1.2.2 利用详情1.2.2…

基于YOLOv5的火灾检测系统的设计与实现(PyQT页面+YOLOv5模型+数据集)

基于YOLOv5的火灾检测系统的设计与实现 概述系统架构主要组件代码结构功能描述YOLOv5检测器视频处理器主窗口详细代码说明YOLOv5检测器类视频处理类主窗口类使用说明环境配置运行程序操作步骤检测示例图像检测视频检测实时检测数据集介绍数据集获取数据集规模YOLOv5模型介绍YOL…

对日期的处理

对日期的处理 对编码进行统一&#xff0c;在脚本最开始&#xff1a; # -*- coding: utf-8 -*-这里涉及到两个操作&#xff0c;一个是将数据进行标准化&#xff0c;比如有些日期是2024/05/06这并不符合日期的标准格式&#xff0c;需要转换成这样的2024-05-06 def tran_std(st…

java基于ssm+jsp 社区疫情防控管理信息系统

1前台首页功能模块 社区疫情防控管理信息系统&#xff0c;在社区疫情防控管理信息系统可以查看首页、物品信息、论坛信息、新闻资讯、我的、跳转到后台等内容&#xff0c;如图1所示。 图1系统首页界面图 用户登录、用户注册&#xff0c;通过注册填写账号、密码、姓名、身份证、…

正则表达式,linux文本三剑客

正则表达式匹配的是文本内容&#xff0c;linux的文本三剑客都是针对文本内容&#xff0c;按行进行匹配 文本三剑客&#xff1a; grep 过滤文本内容 sed 针对文本内容进行增删改查 awd 按行取列 一.grep命令 作用就是使用正则表达式来匹配文本内容 -m 数字&#xff1a;匹配…

在linux系统中使用docker、mysql实例

systemctl 是一个命令行工具&#xff0c;用于控制和管理基于 systemd 的 Linux 发行版中的系统和服务。 启动服务 &#xff1a;使用 systemctl start [service-name] 开始一个服务。 如启动docker&#xff1a;systemctl start docker 停止服务 &#xff1a;使用 systemctl st…

直播预约丨《袋鼠云大数据实操指南》No.3:数据资产管理实操,如何有效进行数据治理

近年来&#xff0c;新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮&#xff0c;持续冲击并革新着企业数字化转型的观念视野&#xff0c;昭示着一个以数据为核心驱动力的新时代正稳步启幕。 面对这些引领经济转型的新兴概念&#xff0c;为了更好地服务于客户…

[Shell编程学习路线]——While循环应用技巧 (详细讲解)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月20日16点30分 &#x1f004;️文章质量&#xff1a;95分 目录 ————前言———— 基本结构 图示原理 示例 测试 …