首页 > 其他分享 >鸿蒙自定义弹窗中的变量如何传递给页面

鸿蒙自定义弹窗中的变量如何传递给页面

时间:2024-01-01 15:00:42浏览次数:33  
标签:OpenHarmony string 鸿蒙 CustomDialogController inputValue 弹窗 自定义

鸿蒙自定义弹窗中的变量如何传递给页面

作者:坚果 团队:坚果派 公众号:“大前端之旅”

团队介绍:坚果派由坚果创建,团队拥有8个华为HDE,3个HSD,以及若干其他领域的三十余位万粉博主运营。

本人为华为HDE、中国计算机学会CCF专业会员、OpenHarmony布道师、开发者联盟优秀讲师、2023年开源之夏导师、2023年OpenHarmony应用创新赛导师、RISC-V+OpenHarmony应用创意赛导师、OpenHarmony三方库贡献者、开放原子开源基金会技术+生态贡献者第一批开放原子开源讲师、OpenHarmony校源行开源大使、InfoQ签约作者、CSDN博客专家、电子发烧友MVP、51CTO博客专家博主、阿里云博客专家、曾受邀参加2022,2023HDC大会。专注于分享的技术包括HarmonyOS/OpenHarmony,ArkUI-X,元服务,服务卡片,华为自研语言,在2022年战码活动中,带领100余人完成pr的提交,配合孵化三个小队长。也在此活动中累计完成1.5W行代码提交,以及在2023年OpenHarmony创新赛中。累计辅导60+队伍,完成作品的提交,在相关社区累计发布OpenHarmony相关技术文章/视频50+,获得20w+浏览量。团队成员聚集在北京,上海,南京,深圳,广州,宁夏等地,欢迎合作。

  • 方式一:使用组件的状态变量传递。
  • 方式二:在初始化弹窗时,传递一个方法给自定义弹窗。
  • 方式三:使用AppStorage或LocalStorage方式管理页面状态,实现自定义弹窗和页面之间状态的共享。

方式一:使用组件的状态变量传递。

@CustomDialog
export struct CustomDialog01 {
  @Link inputValue: string
  controller: CustomDialogController

  build() {
    Column() {
      Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
      TextInput({ placeholder: '', text: this.inputValue }).height(60).width('90%')
        .onChange((value: string) => {
          this.inputValue = value
        })
    }
  }
}

@Entry
@Component
struct DialogDemo01 {
  @State inputValue: string = 'click me'
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialog01({
      inputValue: $inputValue
    })
  })

  build() {
    Column() {
      Button(this.inputValue).fontSize(30)
        .onClick(() => {
          this.dialogController.open()
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 }).height("100%").justifyContent(FlexAlign.Center)
  }
}

方式二:在初始化弹窗时,传递一个方法给自定义弹窗,在自定义弹窗中触发该方法,弹窗中变量作为方法的参数。

@CustomDialog
export  struct CustomDialog01 {
  private inputValue: string
  changeInputValue: (val: string) => void
  controller: CustomDialogController
  build() {
    Column() {
      Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
      TextInput({ placeholder: '', text: this.inputValue }).height(60).width('90%')
        .onChange((value: string) => {
          this.changeInputValue(value)
        })
    }
  }
}
@Entry
@Component
struct DialogDemo01 {
  @State inputValue: string = 'click me'
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialog01({
      inputValue: this.inputValue,
      changeInputValue: (val: string) => {
        this.inputValue = val
      }
    })
  })


  build() {
    Column() {
      Button(this.inputValue).fontSize(30)
        .onClick(() => {
          this.dialogController.open()
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 }).height("100%").justifyContent(FlexAlign.Center)
  }
}

方式三:使用AppStorage或LocalStorage方式管理页面状态,实现自定义弹窗和页面之间状态的共享

let storage = LocalStorage.GetShared()
@CustomDialog
export  struct CustomDialog01 {
  @LocalStorageLink('inputVal')  inputValue: string = ''
  controller: CustomDialogController
  build() {
    Column() {
      Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
      TextInput({ placeholder: '', text: this.inputValue }).height(60).width('90%')
        .onChange((value: string) => {
          this.inputValue = value;
        })
    }
  }
}

@Entry(storage)
@Component
struct DialogDemo01 {
  @LocalStorageLink('inputVal') inputValue: string = '点击'
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialog01()
  })

  build() {
    Column() {
      Button(this.inputValue)
        .onClick(() => {
          this.dialogController.open()
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 })
  }
}

以上就是 自定义弹窗中的变量如何传递给页面的三种办法。

大家可以直接复制源码运行。

标签:OpenHarmony,string,鸿蒙,CustomDialogController,inputValue,弹窗,自定义
From: https://blog.51cto.com/jianguo/9057664

相关文章

  • Java 自定义注解
    1. 元注解元注解是Java 提供的一些基本注解,使用这些元注解区可疑创建新的注解;可以先大致看一下元注解,然后去看后面自定义注解的例子。元注解有@Retention,@Documented,@Target,@Inherited,@Repeatable 五种。1.1 @Retention@Retention 可以定义注解的生命周期,注解的存活时......
  • Java 自定义类加载器
    1. 系统类加载器系统提供的类加载器有如下三种:启动类加载器, 扩展类加载器,引用程序类加载器。1.1 启动类加载器启动类加载器(BootstrapClassLoader)负责将存放在<JRE_HOME>\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如rt.jar......
  • 自定义类型:结构体
    //————————-自定义类型:结构体,枚举,联合//C语言已经提供给我们一些内置类型,例如:int,char,short,double,float//但是远不能满足我们对于类型的使用需求,//因此我们引入自定义类型,例如:结构体、联合体、枚举//————结构体//一、结构体的声明//1.结构的定义:结构是一些......
  • 34 VIVADO自定义IP简单封装方法
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述XILINX作为FPGA全球老大,不仅仅是硬件技术实力,而且EDA软件也是非常优秀,XILINXVIVADO是业内最先进的开......
  • 在SpringBoot中自定义指标并使用Prometheus监控报警
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享在10分钟教你使用Prometheus监控SpringBoot工程中介绍了如何使用Prometheus监控SpringBoot提供的默认指标,这篇介绍如何自定义业务指标,并使用Prometheus进行监控并报警,同时在Grafana进行展现示例......
  • cocos 自定义property
    exportenumAviaBC2CountryEnum{GBR=1,USA=2,}//定义一个图片类型的类@ccclass("SpriteTypes")//这个名字一定要写,而且还注意不能取下面的类名不然cocosCreator会一直报警告classSpriteType{//语言@property({type:cc.Enum(AviaBC2Cou......
  • zb-table自定义行样式
    h5开发中要展示个表格,找了一圈感觉zb-table比较合适,就用了这个。但自定义行样式一直找不到文章,网上写的都是el-table的自定义样式,误导了一些时间看zb-table的源码cellStyle是写在style里的,是个数组包含了个对象,所以return的时候要返回一个对象,setCellStyle({row,column,row......
  • 鸿蒙(HarmonyOS 3.1) DevEco Studio 3.1开发环境汉化
    鸿蒙(HarmonyOS3.1)DevEcoStudio3.1开发环境汉化一、安装环境操作系统: Windows10专业版IDE:DevEcoStudio3.1SDK:HarmonyOS3.1二、设置过程打开IDE,在第一个菜单File编辑中找到Settings...菜单编辑在Setting...中找到Plugins菜单编辑在Type/toseeoptions输入框中输入Chi......
  • WPF自定义控件之ItemsControl鱼眼效果
    原理先获取鼠标在控件中的坐标,在获取其每一项相对于ItemsControl的坐标,然后计算每一项离当前鼠标的距离,在根据这个距离,对其每一项进行适当的缩放实现创建一个类,命名为FishEyeItemsControl publicclassFishEyeItemsControl:ItemsControl 添加应用鱼眼效果方法(控制其控件......
  • windows 创建自定义url协议 通过浏览器打开cmd
    打开regedit注册表编辑器找到HKEY_CLASSES_ROOT新建如下目录 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------......