【鸿蒙HarmonyOS开发笔记】如何自定义弹窗

news/2024/7/21 12:18:13 标签: harmonyos, 笔记, 华为

创建自定义弹窗

自定义弹窗需要使用@CustomDialog装饰器装饰

在其中需要声明一个controller对象来控制弹窗,对象类型是CustomDialogController

@CustomDialog
export  struct Buttonfc{
  controller: CustomDialogController = new CustomDialogController({ builder: Buttonfc() })

  values:string = ''
  confirm:(value) => void
  build(){
      Column({space:20}){
        Text('请输入答案').fontSize(20)
        TextInput({placeholder:'请输入你的答案'}).type(InputType.Number)
          .onChange((value)=>{
            this.values = value
          })
        Row({space:60}){
          Button('确定').onClick((event: ClickEvent) => {
            this.confirm(this.values)
            this.controller.close()
          })
          Button('取消').onClick((event: ClickEvent) => {
            this.controller.close()
          })
        }
      }.padding(20)
  }
}

在需要使用的组件中,也需要声明一个controller对象来控制弹窗

controller: CustomDialogController = new CustomDialogController({
    builder:Buttonfc({
    confirm:(value)=>{
     	this.answer = value
    }}),
    alignment:DialogAlignment.Bottom,
    offset:{dx:0,dy:-20}
  })

其中confirm是弹窗组件的自定义函数

alignment可以控制弹窗的位置

offset控制弹窗相对位置的偏移量


打开弹窗就在父组件中使用controller.open()

this.controller.open()

关闭弹窗需要在弹窗组件中使用controller.close()

this.controller.close()

完整案例

弹窗组件代码:

@CustomDialog
export  struct Buttonfc{

  controller: CustomDialogController = new CustomDialogController({ builder: Buttonfc() })
  values:string = ''
  confirm:(value) => void
  
  build(){
      Column({space:20}){
        Text('请输入答案').fontSize(20)
        TextInput({placeholder:'请输入你的答案'}).type(InputType.Number)
          .onChange((value)=>{
            this.values = value
          })
        Row({space:60}){
          Button('确定').onClick((event: ClickEvent) => {
            this.confirm(this.values)
            this.controller.close()
          })
          Button('取消').onClick((event: ClickEvent) => {
            this.controller.close()
          })
        }
      }.padding(20)
  }
}


父组件代码:

import { Buttonfc } from './tc'
@Entry
@Component
struct CustomDialogPage {
  @State answer: string = '?'
  Tclist:string[] = ['1','2','3']
  indexs:number = 0
  controller: CustomDialogController = new CustomDialogController({
    builder:Buttonfc({confirm:(value)=>{
      this.answer = value
    }}),
    alignment:DialogAlignment.Bottom,
    offset:{dx:0,dy:-20}
  })

  build() {
    Column({ space: 50 }) {
      Row() {
        Text('1+1=')
          .fontWeight(FontWeight.Bold)
          .fontSize(30)
        Text(this.answer)
          .fontWeight(FontWeight.Bold)
          .fontSize(30)
      }

      Button('作答')
        .onClick(() => {
          //弹窗
          this.controller.open()
        })
    }.width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}


http://www.niftyadmin.cn/n/5435680.html

相关文章

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS多路视频融合叠加,提供1套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD多路视频融合叠加应用本方案的S…

GPT能复制人类的决策和直觉吗?

GPT-3能否复制人类的决策和直觉? 近年来,像GPT-3这样的神经网络取得了显著进步,生成的文本几乎与人类写作内容难以区分。令人惊讶的是,GPT-3在解决数学问题和编程任务方面也表现出色。这一显著进步引发了一个问题:GPT…

力扣-1351 统计有序矩阵中的负数

给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1: 输入:grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输出:8 解释&…

shell编程中 for while until循环的使用方法及案例

CSDN 成就一亿技术人! 作者主页:点击! Shell编程专栏:点击! CSDN 成就一亿技术人 ————前言———— Shell脚本编程中,有几种常见的循环结构,包括for循环、while循环和until循环&#xf…

AJAX-Promise

Promise 基本使用 定义:Promise对象用于表示一个异步操作的最终完成(或失败)及其结果值 好处: 1.逻辑更清晰 2.了解axios函数内部运作机制 3.能解决回调函数的问题 // 1.创建Promise对象 const p new Promise((resolve,reject…

MATLAB环境下基于决策树和随机森林的心力衰竭患者生存情况预测

近年来,随着医学数据的不断积累和计算机技术的快速发展,许多机器学习技术已经被用在医学领域,并取得了不错的效果。与传统的基于医学知识经验的心衰预后评估模型相比,机器学习方法可以快速、高效地从繁杂的、海量的心衰病人数据中…

vue-cli-浏览器实现热更新

最常用的是webpack-dev-server,它是一个小型的Node.js Express服务器,它使用webpack-dev-middleware来服务于webpack的包。当文件变动时,它会通知浏览器自动刷新。 使用步骤: 安装 webpack 和 webpack-cli npm install --regist…

Netty服务器结合WebSocke协议监听和接收数据

目录 1.pom依赖2.配置属性3.创建netty服务器4.建立监听和响应5.创建启动器6.前端static下页面7.前端js8.注意异常问题9.创建netty服务器--使用守护线程 1.pom依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId>&l…