HarmonyOS 鸿蒙Next CustomDialog在Component组件中controller一直是undefined
HarmonyOS 鸿蒙Next CustomDialog在Component组件中controller一直是undefined
export struct CustomCommonDialog {
controller: CustomDialogController //这个一直提示undfine。
cancel: () => void = this.setCancel
confirm: () => void = this.setConfirm
@Prop message:string = ''
@Prop leftbt:string = '取消'
@Prop leftFontColor:string = '#FF8300'
@Prop rightbt:string = '确定'
@Prop img:string = 'app.media.bg_internal_warning_dialog'
build() {
Column(){
Column() {
Text(this.message) {
}.fontSize(13).fontColor('#333333').margin({left: 15, right:15}).fontWeight(FontWeight.Bold).textAlign(TextAlign.Center)
Image($r(`${this.img}`))
.width("100%")
.height(38)
.objectFit(ImageFit.Fill)
.position({x: 0, y: 96})
Image($r('app.media.ic_alert_close'))
.width(13)
.height(13)
.objectFit(ImageFit.Fill)
.position({x: '90%', y:10})
.onClick(() => {
this.controller.close()
})
}.width(288).height(134).backgroundColor(Color.White).borderRadius(10).justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)
Row(){
Button(this.leftbt)
.width(115)
.height(38)
.fontSize(15)
.fontColor(this.leftFontColor)
.type(ButtonType.Normal)
.fontWeight(FontWeight.Bold)
.margin({ left: 10 })
.backgroundColor("#ffffff")
.borderRadius(10)
.onClick(() => {
this.controller.close()
this.cancel()
}).margin({left:20, right:20})
Button(this.rightbt)
.width(115)
.height(38)
.fontSize(15)
.fontColor("#ffffff")
.borderRadius(10)
.type(ButtonType.Normal)
.fontWeight(FontWeight.Bold)
.backgroundColor("#FF8300")
.onClick(() => {
this.controller.close()
this.confirm()
}).margin({left:20, right:20})
}.margin({top:14, bottom:10})
}.alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center).margin({left:10, right:10})
}
setCancel() {
}
setConfirm() {
}
}
@Component
export struct WXDialog {
public show() {
let controller = new CustomDialogController({
builder: CustomCommonDialog({
leftbt: '取消',
leftFontColor: '#FF9500',
rightbt: '打卡',
message: '"新东方小书童”想要打开微信',
confirm: () => {
}
}), customStyle: true, autoCancel: false
})
controller.open()
}
build() {
}
}
更多关于HarmonyOS 鸿蒙Next CustomDialog在Component组件中controller一直是undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
如果是想要修改自定义弹窗的样式,可以参考demo:
// xxx.ets
[@CustomDialog](/user/CustomDialog)
struct CustomDialogExample {
controller: CustomDialogController //这个一直提示undfine。
cancel: () => void = this.setCancel
confirm: () => void = this.setConfirm
[@Prop](/user/Prop) message:string = ''
[@Prop](/user/Prop) leftbt:string = '取消'
[@Prop](/user/Prop) leftFontColor:string = '#FF8300'
[@Prop](/user/Prop) rightbt:string = '确定'
[@Prop](/user/Prop) img:string = 'app.media.bg_internal_warning_dialog'
build() {
Column(){
Column() {
Text(this.message) {
}.fontSize(13).fontColor('#333333').margin({left: 15, right:15}).fontWeight(FontWeight.Bold).textAlign(TextAlign.Center)
Image($r(`${this.img}`))
.width("100%")
.height(38)
.objectFit(ImageFit.Fill)
.position({x: 0, y: 96})
Image($r('app.media.startIcon'))
.width(13)
.height(13)
.objectFit(ImageFit.Fill)
.position({x: '90%', y:10})
.onClick(() => {
this.controller.close()
})
}.width(288).height(134).backgroundColor(Color.White).borderRadius(10).justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)
Row(){
Button(this.leftbt)
.width(115)
.height(38)
.fontSize(15)
.fontColor(this.leftFontColor)
.type(ButtonType.Normal)
.fontWeight(FontWeight.Bold)
.margin({ left: 10 })
.backgroundColor("#ffffff")
.borderRadius(10)
.onClick(() => {
this.controller.close()
this.cancel()
}).margin({left:20, right:20})
Button(this.rightbt)
.width(115)
.height(38)
.fontSize(15)
.fontColor("#ffffff")
.borderRadius(10)
.type(ButtonType.Normal)
.fontWeight(FontWeight.Bold)
.backgroundColor("#FF8300")
.onClick(() => {
this.controller.close()
this.confirm()
}).margin({left:20, right:20})
}.margin({top:14, bottom:10})
}.alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center).margin({left:10, right:10})
}
setCancel() {
}
setConfirm() {
}
}
[@Entry](/user/Entry)
[@Component](/user/Component)
struct CustomDialogUser {
dialogController: CustomDialogController | null = new CustomDialogController({
builder: CustomDialogExample({
leftbt: '左边',
leftFontColor: '#FF9500',
rightbt: '右边',
message: '"新东方小书童”想要打开微信',
cancel: ()=> { this.onCancel() },
confirm: ()=> { this.onAccept() }
}),
cancel: this.existApp,
autoCancel: true,
onWillDismiss:(dismissDialogAction: DismissDialogAction)=> {
console.info("reason=" + JSON.stringify(dismissDialogAction.reason))
console.log("dialog onWillDismiss")
if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {
dismissDialogAction.dismiss()
}
if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
dismissDialogAction.dismiss()
}
},
alignment: DialogAlignment.Center,
offset: { dx: 0, dy: -20 },
customStyle: false,
cornerRadius: 20,
width: 300,
height: 200,
borderWidth: 1,
borderStyle: BorderStyle.Dashed,//使用borderStyle属性,需要和borderWidth属性一起使用
borderColor: Color.Blue,//使用borderColor属性,需要和borderWidth属性一起使用
backgroundColor: Color.White,
shadow: ({ radius: 20, color: Color.Grey, offsetX: 50, offsetY: 0}),
})
// 在自定义组件即将析构销毁时将dialogController置空
aboutToDisappear() {
this.dialogController = null // 将dialogController置空
}
onCancel() {
console.info('Callback when the first button is clicked')
}
onAccept() {
console.info('Callback when the second button is clicked')
}
existApp() {
console.info('Click the callback in the blank area')
}
build() {
Column() {
Button('click me')
.onClick(() => {
if (this.dialogController != null) {
this.dialogController.open()
}
}).backgroundColor(0x317aff)
}.width('100%').margin({ top: 5 })
}
}
更多关于HarmonyOS 鸿蒙Next CustomDialog在Component组件中controller一直是undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
[@CustomDialog](/user/CustomDialog) 注解没加吧
在HarmonyOS鸿蒙系统中,如果你遇到Next CustomDialog在Component组件中controller一直是undefined的问题,这通常是因为Dialog的controller没有正确初始化或者没有正确传递到使用的地方。
确保你按照以下步骤操作:
-
正确创建Dialog:使用
CustomDialog
的构造函数来创建Dialog实例,并确保传递了正确的上下文(Context)。 -
初始化Controller:在Dialog的构造或初始化过程中,确保controller已经被正确初始化。通常,controller是在Dialog的某个方法中设置的,确保这个方法被调用。
-
传递Controller:如果你需要在其他组件或方法中访问Dialog的controller,确保你已经将controller正确传递给了这些组件或方法。
-
检查生命周期:确保在Dialog的生命周期内,controller没有被意外地置为null或未定义。检查Dialog的打开和关闭逻辑,确保controller在这些过程中保持有效。
-
调试和日志:使用调试工具和日志输出来跟踪controller的状态,查看它是在哪个步骤变为undefined的。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html