//Index.ets
import { MyDialog } from './MyDialog'
import { TitleButton } from './TitleButton'
@Entry
@Component
struct MyPage {
build() {
Column(){
TitleButton({
title:'OpenMyDialog',
customDialogController: new CustomDialogController({
builder:MyDialog()
})
})
}
}
}
//MyDialog.ets
@Component
@CustomDialog
export struct MyDialog {
controller: CustomDialogController;
build() {
Button('Quit')
.onClick(()=>{
this.controller?.close()
})
}
}
//TitleButton.ets
@Component
export struct TitleButton{
@Prop title:string;
customDialogController?: CustomDialogController;
build() {
Column(){
Button(this.title)
.onClick(()=>{
this.customDialogController?.open()
})
}
}
}
Demo代码文件上面给出,这个场景是 MyPage =\> TitleButton =\> MyDialog,我直接在MyPage中new一个CustomDialogController传给TitleButton,builder使用MyDialog,这个demo下,MyDialog弹窗中的Quit按钮是无法退出弹窗的,调试发现MyDialog中的controller为undefined。
若修改Index.ets和TitleButton.ets如下,则Quit按钮正常退出,程序正常运行,请问为什么上面那种不行。
//修改后Index.ets
import { TitleButton } from './TitleButton'
@Entry
@Component
struct MyPage {
build() {
Column(){
TitleButton({
title:'OpenMyDialog',
})
}
}
}
//修改后TitleButton.ets
import { MyDialog } from './MyDialog';
@Component
export struct TitleButton{
@Prop title:string;
customDialogController?: CustomDialogController;
build() {
Column(){
Button(this.title)
.onClick(()=>{
this.customDialogController=new CustomDialogController({
builder:MyDialog()
})
this.customDialogController?.open()
})
}
}
}
CustomDialogController仅在作为@CustomDialog和@Component struct的成员变量,且在@Component struct内部定义时赋值才有效,请参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-methods-custom-dialog-box-V5\#customdialogcontroller