当前位置: 首页 > news >正文

自学鸿蒙HarmonyOS的ArkTS语言<十>@BuilderParam装饰器

作用:当子组件多处使用时,给某处的子组件添加特定功能

一、初始化

1、只能被@Builder装饰的方法初始化
2、使用所属自定义组件的@builder方法初始化
3、使用父组件的@builder方法初始化 - 把父组件的@builder传过去,参数名和子组件的@builderParam同名

@Component
struct Child {@Builder childBuilder() {}@BuilderParam childBuilderParam: () => void = this.childBuilder // 必须用childBuilder初始化下,否则预览出不来build() {Column() {Text('我是子组件').fontColor(Color.White)this.childBuilderParam()}}
}@Entry
@Component
struct Index7 {@Builder parentBuilder() {Text('我是父组件定制的的 builder')}build() {Column() {Row() {Child({childBuilderParam: this.parentBuilder}) // 添加独特功能}.padding(10).backgroundColor(Color.Brown)Row() {Child()}.padding(10).backgroundColor(Color.Green)}}
}
二、this指向
@Component
struct Child1 {label: string = '我是子组件的label'@Builder childBuilder() {}@BuilderParam childBuilderParam: () => void = this.childBuilder@BuilderParam childChangeThisBuilderParam: () => void = this.childBuilderbuild() {Column() {this.childBuilderParam()this.childChangeThisBuilderParam()}}
}@Entry
@Component
struct Index7_1 {label: string = '我是父组件的label'@Builder parentBuilder() {Text(this.label)}build() {Column() {this.parentBuilder() // this指向父组件Child1({childBuilderParam: this.parentBuilder, // this.parentBuilder传入到child中指向childchildChangeThisBuilderParam: (): void => this.parentBuilder(), // 箭头函数的this指向宿主对象,即父组件})}}
}

在这里插入图片描述

三、带参数
class Tmp {label: string = ''
}
// 全局builder
@Builder function globalBuilder($$: Tmp) {Text($$.label)
}// Child1中
...
// 有参数
@BuilderParam childHasParamsBuilderParam: ($$: Tmp) => void = globalBuilder
build() {Column() {...this.childHasParamsBuilderParam({label: '我是一个有参数的BuilderParam'})}
}
// 父组件中
...
Child1({...childHasParamsBuilderParam: globalBuilder
})
四、尾随闭包的形式
@Component
struct Child2 {@Builder childBuilder() {}// 尾随闭包的形式传入时子组件内只能有一个BuilderParam@BuilderParam childBuilderParam: () => void = this.childBuilderbuild() {Column() {Text('我是子组件2')this.childBuilderParam()}.margin({top: 30})}
}
// 父组件中
...
Child2() {Column() {globalBuilder({label: '我是通过尾随闭包传入的'})}
}

在这里插入图片描述
注意:
尾随闭包的形式子组件内只能有一个 @BuilderParam

相关文章:

  • ERROR: No matching distribution found for execjs
  • 《逻辑006:页面跳转并传参》
  • 麻省理工学院 - MIT - 线性代数学习笔记
  • 【linux】服务器安装NVIDIA驱动
  • 【React笔记初学总结一】React新手的学习流程笔记总结,掰开了揉碎了,下载安装基础结构学习
  • Nginx系列-8 allow与deny和error_page使用介绍
  • 达梦数据库(一)mysql2dm
  • Nvidia Isaac Sim代码编程 入门教程 2024(7)
  • HarmonyOS根据官网写案列~ArkTs从简单地页面开始
  • Spring中的IOC详解
  • docker安装指导
  • 【Day12】登录认证、异常处理
  • 基于JAVA+SpringBoot+Vue+uniapp的微信小程序点餐平台
  • C++案例三:猜数字游戏
  • 【QT】窗口|菜单栏|菜单项|工具栏|状态栏|浮动窗口
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【React系列】如何构建React应用程序
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS 专业技巧
  • ES6系统学习----从Apollo Client看解构赋值
  • HashMap ConcurrentHashMap
  • JavaScript创建对象的四种方式
  • oldjun 检测网站的经验
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Unix命令
  • 如何编写一个可升级的智能合约
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 小程序测试方案初探
  • 运行时添加log4j2的appender
  • 在weex里面使用chart图表
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​你们这样子,耽误我的工作进度怎么办?
  • #{} 和 ${}区别
  • #include到底该写在哪
  • #考研#计算机文化知识1(局域网及网络互联)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm码农论坛 毕业设计 231126
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (算法设计与分析)第一章算法概述-习题
  • (学习日记)2024.01.19
  • *上位机的定义
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .chm格式文件如何阅读
  • .gitattributes 文件
  • .net core Redis 使用有序集合实现延迟队列
  • .NET Core 成都线下面基会拉开序幕
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net FrameWork简介,数组,枚举
  • .net mvc 获取url中controller和action