HarmonyOS dialog和page,还有page和page之间通信

比如我在a页面有个按钮,弹出一个dialog弹窗,弹窗进行了一些操作后怎么通知给a页面。

场景是这样的,我的a页面上有一个帖子的流,我点击右上角更多,出现负反馈弹窗,我点击不感兴趣后,请求接口,并将a页面上的该帖子删除,我现在不知道dialog和page如何通信

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

弹窗信息传递给弹窗,可参考如下解决措施:

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

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

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

示例代码:

方法一:

@CustomDialog
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)
        .onClick(() => {
          this.dialogController.open()
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 })
  }
}

方法二:

@CustomDialog
struct CustomDialog02 {
  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 DialogDemo02 {
  @State inputValue: string = 'click me'
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialog02({
      inputValue: this.inputValue,
      changeInputValue: (val: string) => {
        this.inputValue = val
      }
    })
  })

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

方法三:

let storage = LocalStorage.GetShared()
@CustomDialog
struct CustomDialog03 {
  @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 DialogDemo03 {
  @LocalStorageLink('inputVal') inputValue: string = ''
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialog03()
  })

  build() {
    Column() {
      Button(this.inputValue)
        .onClick(() => {
          this.dialogController.open()
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 })
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
JS UI框架中FAPA的page之间如何通信
2959浏览 • 1回复 待解决
HarmonyOS NavDestinationpage使用区别
140浏览 • 1回复 待解决
HarmonyOS page之间的相互传值
83浏览 • 1回复 待解决
HarmonyOS pageWebView无法设置为透明
616浏览 • 1回复 待解决
ArkTs在Page页内,如何关闭当前Page页?
3173浏览 • 1回复 待解决
HarmonyOS page跳转白屏
770浏览 • 1回复 待解决
HarmonyOS page 参数问题
406浏览 • 1回复 待解决
HarmonyOS page 半透明
22浏览 • 1回复 待解决
HarmonyOS page全局控制
107浏览 • 1回复 待解决
HarmonyOS page页面的问题
230浏览 • 1回复 待解决
HarmonyOS page设置全屏问题
251浏览 • 1回复 待解决
HarmonyOS route怎么销毁page
1247浏览 • 1回复 待解决
HarmonyOS 关于移除所有page
334浏览 • 1回复 待解决