HarmonyOS 间接使用自定义Dialog,controller属性undefined问题?

//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()
        })
    }
  }
}
阅读 491
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进