HarmonyOS 关于自定义事件回调的方法中,this为undefine

比如这边有一个自定义Dialog,里面会有两个回调方法,cancel和confirm,在回调方法中,获取不到当前page里面的属性this为undefine。在onAccept中的this为undefine,请问如何获取到当前对象?

//settingPage.ets中  
 private dialogController: CustomDialogController = new CustomDialogController({  
    builder: WeDialog({  
      title: "提示",  
      content: "确定放弃本次设置?",  
      cancel: this.onCancel,  
      confirm: this.onAccept  
    }),  
    gridCount: 3,  
    autoCancel: false,  
    alignment: DialogAlignment.Center,  
  })  
  onCancel() {  
  }  
  onAccept() {  
    this.dialogController.close();  
  }
HarmonyOS
2024-09-29 12:33:42
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

可以尝试以下demo:

//CustomDialogExample.ets  
@CustomDialog  
export struct CustomDialogExample {  
  cancel?: () => void  
  confirm?: () => void  
  controller: CustomDialogController  
  build() {  
    Column() {  
      Text('我是内容').fontSize(20).margin({ top: 10, bottom: 10 })  
      Flex({ justifyContent: FlexAlign.SpaceAround }) {  
        Button('cancel')  
          .onClick(() => {  
            this.controller.close()  
            if (this.cancel) {  
              this.cancel()  
            }  
          }).backgroundColor(0xffffff).fontColor(Color.Black)  
        Button('confirm')  
          .onClick(() => {  
            this.controller.close()  
            if (this.confirm) {  
              this.confirm()  
            }  
          }).backgroundColor(0xffffff).fontColor(Color.Red)  
      }.margin({ bottom: 10 })  
    }  
  }  
}
//CustomDialogUser.ets  
import { CustomDialogExample } from '../view/CustomDialogExample'  
@Entry  
@Component  
struct CustomDialogUser {  
  dialogController: CustomDialogController = new CustomDialogController({  
    builder: CustomDialogExample({  
      cancel: ()=> { this.onCancel() },  
      confirm: ()=> { this.onAccept() },  
    }),  
  })  
  onCancel() {  
    console.info('Callback when the first button is clicked')  
  }  
  onAccept() {  
    console.info('Callback when the second button is clicked')  
  }  
  build() {  
    Column() {  
      Button('click me')  
        .onClick(() => {  
          this.dialogController.open()  
        })  
    }.width('100%').margin({ top: 5 })  
  }  
}
分享
微博
QQ
微信
回复
2024-09-29 17:35:23
相关问题
HarmonyOS 自定义interface问题
163浏览 • 1回复 待解决
组件自定义函数实现
410浏览 • 1回复 待解决
HarmonyOS 自定义组件事件处理
378浏览 • 1回复 待解决
HarmonyOS 自定义方法链式调用
142浏览 • 1回复 待解决
HarmonyOS 关于自定义弹窗封装调用
336浏览 • 2回复 待解决
HarmonyOS Scroll组件事件问题
148浏览 • 1回复 待解决
关于自定义XComponent加载so问题
123浏览 • 1回复 待解决