自学鸿蒙HarmonyOS的ArkTS语言<九>自定义弹窗组件CustomDialog及二次封装自定义弹窗

一、自定义弹窗
@CustomDialog
struct CustomDialogBuilder {controller: CustomDialogController = new CustomDialogController({ // 注意写法builder: CustomDialogBuilder({})})// controller: CustomDialogController // 这种预览会报错cancel?: () => voidconfirm?: () => voidtext?: stringbuild() {Column() {Text(this.text).padding(20)Flex({ justifyContent: FlexAlign.SpaceAround }) {Button('取消').buttonStyle(ButtonStyleMode.TEXTUAL).onClick(() => {this.controller.close() // 关闭弹窗if (this.cancel) {this.cancel()}})Button('确定').buttonStyle(ButtonStyleMode.TEXTUAL).onClick(() => {if (this.confirm) {this.confirm()}})}.padding(10)}}
}@Entry
@Component
struct Index6 {@State text: string = '我是来自父组件的内容'dialogController: CustomDialogController | null = new CustomDialogController({// builder->自定义弹窗内容构造器builder: CustomDialogBuilder({cancel: () => { this.onCancel() }, // 不能写成 () => this.onCancel()confirm: () => { this.onAccept() },text: this.text}),alignment: DialogAlignment.Center,autoCancel: true,cancel: () => {console.log('点击遮罩层')},onWillDismiss: (res: DismissDialogAction) => { // 有了onWillDismiss不会触发cancelconsole.log('onWillDismiss:', JSON.stringify(res))}// ... 还可以设置backgroundColor, cornerRadius等})// 在自定义组件即将析构销毁时将dialogController置空aboutToDisappear() {this.dialogController = null // 将dialogController置空}onCancel() {console.log('我是父组件中的onCancel')}onAccept() {console.log('我是父组件中的onAccept')}build() {Button('点击我可以获取一个自定义弹窗').onClick(() => {if (this.dialogController !== null) { // dialogController有null类型,必须判断否则报错this.text = '我是来自父组件中的内容2'this.dialogController.open() // 打开弹窗}})}
}

在这里插入图片描述

注意点:
1、自定义弹窗用 @CustomDialog 装饰
2、和普通组件不一样的是自定义弹窗是通过实例化CustomDialogController类显示的,其内容是builder参数(自定义弹窗内容构造器)
3、构造器里面传参的写法
在这里插入图片描述
4、自定义函数中controller用下面这种方式,预览会报错 ??? 不明白
在这里插入图片描述
在这里插入图片描述

二、二次封装自定义弹窗组件
@CustomDialog
struct CustomDialogBuilder {@Link visible: booleancontroller: CustomDialogController = new CustomDialogController({ // 注意写法builder: CustomDialogBuilder({visible: $visible})})// controller: CustomDialogController // 这种预览会报错cancel?: () => voidconfirm?: () => voidtext?: stringbuild() {Column() {Text(this.text).padding(20)Flex({ justifyContent: FlexAlign.SpaceAround }) {Button('取消').buttonStyle(ButtonStyleMode.TEXTUAL).onClick(() => {this.visible = falsethis.controller.close() // 关闭弹窗if (this.cancel) {this.cancel()}})Button('确定').buttonStyle(ButtonStyleMode.TEXTUAL).onClick(() => {this.visible = falseif (this.confirm) {this.confirm()}})}.padding(10)}}
}// 二次封装
@Component
struct Dialog {@Watch('onChange') @Link visible: boolean // 必须在@link前,否则报错cancel?: () => voidconfirm?: () => voidtext?: stringprivate controller = new CustomDialogController({builder: CustomDialogBuilder({cancel: this.cancel,confirm: this.confirm,visible: $visible,text: this.text}),alignment: DialogAlignment.Center,autoCancel: true,cancel: () => {console.log('点击遮罩层')},onWillDismiss: (res: DismissDialogAction) => {console.log('onWillDismiss:', JSON.stringify(res))}})onChange() {console.log('监听visible:', this.visible)if (this.visible) {this.controller.open()} else {this.controller.close()}}build() {}
}@Entry
@Component
struct Index6 {@State visible: boolean = falseonCancel() {console.log('我是来自最顶层的onCancel')}onConfirm() {console.log('我是来自最顶层的onConfirm')}build() {Column() {Button('点击我可以获取一个自定义弹窗').onClick(() => {this.visible = !this.visibleconsole.log(this.visible+'')})Dialog({visible: this.visible,cancel: () => {console.log('我是来自最顶层的oncancel')},confirm: () => {console.log('我是来自最顶层的onConfirm')},text: '我是来自最顶层的文字',})}}
}

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

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

相关文章

微信小游戏 彩色试管 倒水游戏 逻辑

最近开始研究微信小游戏,有兴趣的 可以关注一下 公众号, 记录一些心路历程和源代码。 定义一个 Cup类: 主要功能 初始化水杯:根据传入的颜色信息初始化水杯中的水层。 倒水:模拟水杯倾斜并倒出水的过程。 加水&…

Prometheus 云原生 - 基于 file_sd、http_sd 实现 Service Discovery

目录 开始 为什么需要服务发现机制 File Service Discovery(file_sd) 基本概念 配置方式 使用案例 HTTP Service Discovery(http_sd) 基本概念 配置方式 使用案例 开始 为什么需要服务发现机制 我们知道在 Prometheus …

【链表】算法题(一) ---- 力扣 / 牛客

一、移除链表元素 移除链表中值为val的元素,并返回新的头节点 思路: 题目上这样说,我们就可以创建一个新的链表,将值不为val的节点,尾插到新的链表当中,最后返回新链表的头节点。 typedef struct ListNo…

[安洵杯 2019]easy_web1

知识点: 1.base64加解密 2.md5加解密 3.md5碰撞绕过强类型比较 4.Linux命令绕过 进入页面发现url地址中存在 img参数和一个cmd参数,img参数看上去像是base64编码,可以去尝试一下解码. 进行了两次base64解密得到3535352e706e67看着像16进制那么…

员工聊天记录监控方法大全(五种方法你自己选择)

在现代企业中,为了保障业务安全、防止数据泄露和促进工作效率,很多公司会采用各种方法监控员工的聊天记录。虽然听起来有点“大哥哥在看着你”的感觉,但只要在合法和透明的前提下进行,这其实是为了构建一个更加健康、安全的工作环…

网络流问题-Min-cut

文章目录 1. 网络流问题基础1.1 概述1.2 常规算法1.3 总结 2. Ford-Fulkerson Algorithm2.1 概述2.2 Ford 算法2.3 Ford 算法小结 链接: B站学习视频 1. 网络流问题基础 1.1 概述 最大流问题主要是关于有向图问题。有向图中有m个边, n个节点,其中有一个…

怎么用PPT录制微课?详细步骤解析!

随着信息技术的不断发展,微课作为一种新型的教学形式,因其短小精悍、针对性强等特点,在教育领域得到了广泛的应用。而PPT作为一款常用的演示工具,不仅可以用来制作课件,还可以利用其内置的录屏功能或结合专业的录屏软件…

Dify中的经济索引模式实现过程

当索引模式为经济时,使用离线的向量引擎、关键词索引等方式,降低了准确度但无需花费 Token。 一.提取函数**_extract** 根据不同文档类型进行内容的提取: def _extract(self, index_processor: BaseIndexProcessor, dataset_document: Data…

FastAPI 学习之路(四十三)路径操作的高级配置

在实际开发中,可能我们有些接口不能在接口文档中与其他业务接口一样开放给前端或者其他对接人,那么我们肯定会想着在接口文档中对其进行屏蔽隐藏操作,那么可以实现吗? 接口文档中隐藏接口 当然,还很简单,…

【CSS in Depth 2 精译】2.6 CSS 自定义属性(即 CSS 变量)+ 2.7 本章小结

文章目录 2.6 自定义属性(即 CSS 变量)2.6.1 动态变更自定义属性 2.7 本章小结 当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性 …

PGCCC|【PostgreSQL】PCA+PCP+PCM等IT类认证申报个税退税指南

小编特将PostgreSQL证书申报个税退税流程,编辑成文,供大家申报参考哦~ 1.申报专项附加扣除 第一步:打开个人所得税APP,选择“专项附加扣除填报”: 第二步:“扣除年度”选择您要申报的年度,并…

Windows 默认以管理员运行打开CMD

winr 默认以管理员打开运行CMD 需求:在运行页面输入cmd 希望是可以直接通过管理员方式打开的。 winr 打开运行 输入secpol.msc 打开本地安全策略(注意家庭版是没有这个的) 找到本地策略–安全选项–用户帐户控制: 以管理员批准模式运行所有管…

基于Python thinker GUI界面的股票评论数据及投资者情绪分析设计与实现

1.绪论 1.1背景介绍 Python 的 Tkinter 库提供了创建用户界面的工具,可以用来构建股票评论数据及投资者情绪分析的图形用户界面(GUI)。通过该界面,用户可以输入股票评论数据,然后通过情感分析等技术对评论进行情绪分析…

JavaScript 中 await 永远不会 resolve 的 Promise 会导致内存泄露吗?

前言 在 JavaScript 中,await 关键字用于等待一个 Promise 完成,它只能在异步函数(async function)内部使用。当 await 一个永远不会 resolve 的 Promise 时,它确实会阻塞异步函数的进一步执行,但不会直接…

C1W1.Assignment: Logistic Regression

理论课:C1W1.Sentiment Analysis with Logistic Regression 文章目录 前期准备导入包导入数据处理推文文本 Part 1: Logistic regressionPart 1.1: Sigmoid实现 sigmoid 函数Logistic regression: regression and a sigmoid Part 1.2 Cost function and GradientUp…

Python 使用proto 发送socket数据

import socket import binascii import struct from SensingMonitoring_pb2 import Command, CommandNamesif __name__ "__main__":client socket.socket(socket.AF_INET, socket.SOCK_STREAM)client.connect(("192.168.1.100", 22295))# 发送数据comman…

软件模块的初始化

什么是初始化? 软件的初始化(Initialization)是指软件启动或重新配置时执行的一系列步骤和过程,旨在准备软件运行环境、加载必要的配置信息、检查系统依赖项、分配资源(如内存、文件句柄等),以及…

5、Hacker_Kid-v1.0.1

中等难度 目标root权限 先进行一波IP地址发现 netdiscover -i eth0 -r 192.168.1.1/24 发现存在的靶机ip 进行一波端口的探测 发现是一个apache的服务和一个tornado的网站 这里有个细节部分,53端口常见的情况都是走的udp协议做的域名解析,这里查询出来…

【ARM】CCI缓存一致性整理

目录 1.CCI500提供的功能 2.CCI500在SOC系统中所处的位置​编辑 3.CCI500内部结构​编辑 4.功能描述 1.CCI500提供的功能 2.CCI500在SOC系统中所处的位置 3.CCI500内部结构 Transaction Tracker(TT)是用来解决一致性和ordering问题的,它…