0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS Next V2 @Event

万少 来源:jf_22972444 作者:jf_22972444 2025-03-31 09:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

HarmonyOS Next V2 @Event

背景

在上一节中,我们针对父子组件,讲了关于传递数据的知识。我们了解到

  1. @Local 是管理自己内部的数据的,
  2. @Param 是负责接收父组件的数据的,而且子自己内部不能直接修改

按照一个组件最基本的功能, 既能接收外部传入的数据也要向外部传递数据 。那么 @Event 修饰符就是来解决这个问题的了。

介绍

@Event 是 子组件向父组件传递数据的技术,它只能用在 @ComponentV2 修改的组件上,其中的思想是

  1. 完成修改数据的操作,还是放在父组件内部,通过定义一个函数 func 来实现
  2. 在父组件调用子组件的时候,也顺带把这个函数 func 传递给子组件
  3. 子组件在内部 使用 @Event 来修饰 该函数,并且在需要的使用直接调用即可

父组件

  1. 定义内部数据 num
  2. 定义修改内部数据num的函数 func
  3. 使用子组件时,把numfunc都传递过去

@Entry
@ComponentV2
struct Index {
@Local num: number = 100
// 自己定义的函数 负责修改数据, 该函数也要传递给子组件
func = (unit: number) => {
this.num -= unit
}

build() {
Column() {
Button("父组件 修改" + this.num)
.onClick(() => {
this.num++
})
// 使用子组件,并且传递数据 和 传递函数
Son({ num: this.num, func: this.func })
.padding(10)
}
.width("100%")

}
}

## 子组件

1. 使用 `@Param` 接收父组件传递的 `num`
2. 使用`@Event` 接收父组件传递的函数 `func`
3. 定义点击事件的处理函数 `onfunc`,内部直接调用父组件传递过来的函数

@ComponentV2
struct Son {
@Param num: number = 0
@Event func: (num: number) => void = () => {
}
onfunc = () => {
this.func(5)
}

build() {

Column() {
  Button(`子组件 ${this.num}`)

  Button("子组件修改父组件中的状态")
    .onClick(this.onfunc)
}
.border({
  width: 1,
  style: BorderStyle.Dashed
})

}
}

## 流程

![image-20240723105343511](https://wsy996.obs.cn-east-3.myhuaweicloud.com/HarmonyOS%20Next%20V2%20%40Event/readme.assets/image-20240723105343511.png?x-image-process=style/style-8860)

## @Once

`@Once``@Param`作用类似,都可以表示接收父组件传递过来的数据,但是也存在区别

1. `@Once` 只会接收第一次父组件传递过来的数据,后续父组件的数据修改,不会同步到 `@Once`修改的变量上
2. `@Once` 需要和 `@Param` 一起搭配使用,因为 `@Param` 修饰的是父组件传递给子组件的变量,该变量不能直接被修改。所以`@Once`修饰的变量,也不能在子组件内部直接修改。

@ComponentV2
struct Son {
@Once @Param num: number = 0

build() {
Column() {
Button(子组件 ${this.num})
.onClick(() => {
this.num++ // 修改无效
})
}
.border({
width: 1,
style: BorderStyle.Dashed
})
}
}

@Entry
@ComponentV2
struct Index {
@Local num: number = 100

build() {
Column() {

Son({ num: this.num })
    .padding(10)
}
.width("100%")

}
}

![image-20240723110522686](https://wsy996.obs.cn-east-3.myhuaweicloud.com/HarmonyOS%20Next%20V2%20%40Event/readme.assets/image-20240723110522686.png?x-image-process=style/style-8860)

## 总结

1. `@Param` 表示父组件传递给子组件的数据,当父组件修改了,子组件会跟随响应,同时子组件内部不能直接修改 `@Param`修饰的变量
2. `@Event` 表示子组件想要修改父组件数据的一种技术,它用来修改函数,该函数是由父组件定义和传递给子组件的
3. `@Once` 必须和 `@Param` 搭配使用,表示父组件传递过来的数据,只会第一次生效。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35580
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    HarmonyOS Next MQTT演示

    HarmonyOS Next MQTT演示
    发表于 11-07 16:54

    ST-LINK/V2 ST-LINK/V2ST-LINK / V2在调试器/编程器STM8和STM32

    电子发烧友网为你提供(ti)ST-LINK/V2相关产品参数、数据手册,更有ST-LINK/V2的引脚图、接线图、封装手册、中文资料、英文资料,ST-LINK/V2真值表,ST-LINK/V2
    发表于 05-21 00:05

    Kinect v2(Microsoft Kinect for Windows v2 )配置移动电源解决方案

    Kinect v2配置移动电源解决方案Kinect v2如果用于移动机器人上(也可以是其他应用场景),为方便有效地展开后续工作,为其配置移动电源是十分必要的。一、选择移动电源Kinect v2原装
    发表于 01-05 14:51 5次下载
    Kinect <b class='flag-5'>v2</b>(Microsoft Kinect for Windows <b class='flag-5'>v2</b> )配置移动电源解决方案

    Kinect v2(Microsoft Kinect for Windows v2 )配置移动电源解决方案

    Kinect v2(Microsoft Kinect for Windows v2 )配置移动电源解决方案
    发表于 01-05 14:53 0次下载
    Kinect <b class='flag-5'>v2</b>(Microsoft Kinect for Windows <b class='flag-5'>v2</b> )配置移动电源解决方案

    学习V2更新板开源分享

    电子发烧友网站提供《学习V2更新板开源分享.zip》资料免费下载
    发表于 07-26 09:38 0次下载
    学习<b class='flag-5'>V2</b>更新板开源分享

    LED面板V2开源分享

    电子发烧友网站提供《LED面板V2开源分享.zip》资料免费下载
    发表于 08-02 09:37 2次下载
    LED面板<b class='flag-5'>V2</b>开源分享

    智能BMS V2开源设计

    电子发烧友网站提供《智能BMS V2开源设计.zip》资料免费下载
    发表于 08-08 11:38 18次下载
    智能BMS <b class='flag-5'>V2</b>开源设计

    Leaphy Motor shield V2开源

    电子发烧友网站提供《Leaphy Motor shield V2开源.zip》资料免费下载
    发表于 08-22 15:41 0次下载
    Leaphy Motor shield <b class='flag-5'>V2</b>开源

    NodeMCU V2 Amica V3 Lolin的盾牌

    电子发烧友网站提供《NodeMCU V2 Amica V3 Lolin的盾牌.zip》资料免费下载
    发表于 08-24 10:05 2次下载
    NodeMCU <b class='flag-5'>V2</b> Amica <b class='flag-5'>V</b>3 Lolin的盾牌

    悟空PCB徽章V2开源分享

    电子发烧友网站提供《悟空PCB徽章V2开源分享.zip》资料免费下载
    发表于 10-31 11:06 0次下载
    悟空PCB徽章<b class='flag-5'>V2</b>开源分享

    V2 控制器的操作原理

    V2 控制器的操作原理
    发表于 11-14 21:08 1次下载
    <b class='flag-5'>V2</b> 控制器的操作原理

    淘宝与华为合作将基于HarmonyOS NEXT启动鸿蒙原生应用开发

    1月25日,淘宝与华为举办鸿蒙合作签约仪式,宣布将基于HarmonyOS NEXT启动鸿蒙原生应用开发。
    的头像 发表于 01-26 16:14 1791次阅读

    华为HarmonyOS NEXT 10月8日开启公测

    华为宣布,万众瞩目的HarmonyOS NEXT操作系统将于10月8日正式开启公测,标志着这一创新力作即将与广大用户见面。HarmonyOS NEXT作为华为自研操作系统的最新成果,不
    的头像 发表于 09-24 15:41 1714次阅读
    华为<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>NEXT</b> 10月8日开启公测

    HarmonyOS Next V2 @Local 和@Param

    HarmonyOS Next V2 @Local 和@Param @Local 背景 @Local 是 harmony 应用开发中的 v2 版本中 对标**@State**的状态管理修
    的头像 发表于 04-02 18:27 836次阅读
    <b class='flag-5'>HarmonyOS</b> <b class='flag-5'>Next</b> <b class='flag-5'>V2</b> @Local 和@Param

    HarmonyOS Next V2 @Monitor 和@Computed

    HarmonyOS Next V2 @Monitor 和@Computed @Monitor 介绍 @Monitor 是状态把管理 V2 版本中的用于监听状态变量修改的技术。 它可以直
    的头像 发表于 04-02 18:26 629次阅读