HarmonyOS 鸿蒙Next 一个页面里怎么引用两种自定义弹出框
HarmonyOS 鸿蒙Next 一个页面里怎么引用两种自定义弹出框
我的弹出框样式差别比较大,所以我需要写两个弹出框,但是自定义的弹出框要怎么引入两个呢?
以下是我引入了一个了
// 调用弹框
dialogController: CustomDialogController | null = new CustomDialogController({
builder: DeviceOpenDialog({
IsDeviceSuccess:$IsDeviceSuccess,
confirm: () => { }
}),
autoCancel: false,
alignment: DialogAlignment.Center,
gridCount: 8,
customStyle: false,
cornerRadius: 10,
})
// 在自定义组件即将析构销毁时将dialogControlle置空
aboutToDisappear() {
this.dialogController = null
}
// wifi设置
setWIFI () {
if (this.dialogController != null) {
this.dialogController.open()
}
}
更多关于HarmonyOS 鸿蒙Next 一个页面里怎么引用两种自定义弹出框的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
支持文档:自定义弹窗 (CustomDialog)-弹窗-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者 (huawei.com)
// xxx.ets
@CustomDialog
struct CustomDialogExampleTwo {
controllerTwo?: CustomDialogController
build() {
Column() {
Text('我是第二个弹窗')
.fontSize(30)
.height(100)
Button('点我关闭第二个弹窗')
.onClick(() => {
if (this.controllerTwo != undefined) {
this.controllerTwo.close()
}
})
.margin(20)
}
}
}
@CustomDialog
struct CustomDialogExample {
@Link textValue: string
@Link inputValue: string
dialogControllerTwo: CustomDialogController | null = new CustomDialogController({
builder: CustomDialogExampleTwo(),
alignment: DialogAlignment.Bottom,
offset: { dx: 0, dy: -25 }
})
controller?: CustomDialogController
cancel: () => void = () => {
}
confirm: () => void = () => {
}
build() {
Column() {
Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
TextInput({ placeholder: '', text: this.textValue }).height(60).width('90%')
.onChange((value: string) => {
this.textValue = value
})
Text('Whether to change a text?').fontSize(16).margin({ bottom: 10 })
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('cancel')
.onClick(() => {
if (this.controller != undefined) {
this.controller.close()
this.cancel()
}
}).backgroundColor(0xffffff).fontColor(Color.Black)
Button('confirm')
.onClick(() => {
if (this.controller != undefined) {
this.inputValue = this.textValue
this.controller.close()
this.confirm()
}
}).backgroundColor(0xffffff).fontColor(Color.Red)
}.margin({ bottom: 10 })
Button('点我打开第二个弹窗')
.onClick(() => {
if (this.dialogControllerTwo != null) {
this.dialogControllerTwo.open()
}
})
.margin(20)
}.borderRadius(10)
// 如果需要使用border属性或cornerRadius属性,请和borderRadius属性一起使用。
}
}
@Entry
@Component
struct CustomDialogUser {
@State textValue: string = ''
@State inputValue: string = 'click me'
dialogController: CustomDialogController | null = new CustomDialogController({
builder: CustomDialogExample({
cancel: () => { this.onCancel() },
confirm: () => { this.onAccept() },
textValue: $textValue,
inputValue: $inputValue
}),
cancel: this.exitApp,
autoCancel: true,
alignment: DialogAlignment.Bottom,
offset: { dx: 0, dy: -20 },
gridCount: 4,
customStyle: false,
cornerRadius: 10,
})
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')
}
exitApp() {
console.info('Click the callback in the blank area')
}
build() {
Column() {
Button(this.inputValue)
.onClick(() => {
if (this.dialogController != null) {
this.dialogController.open()
}
}).backgroundColor(0x317aff)
}.width('100%').margin({ top: 5 })
}
}
@CustomDialog
struct MyDialog1 {
controller2: CustomDialogController
controller1: CustomDialogController
title: string=''
build() {
Row() {
Column({ space: 10 }) {
Text(this.title)
.fontSize(30)
.fontColor(Color.Blue)
Button('点击打开弹窗2')
.onClick(() => {
this.controller2.open()
}).backgroundColor(0xffffff)
.fontColor(Color.Red)
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('cancel')
.onClick(() => {
this.controller1.close()
}).backgroundColor(0xffffff).fontColor(Color.Black)
}.width("100%")
}.width("50%")
}.height("50%")
}
}
// 弹窗组件
@CustomDialog
struct MyDialog2 {
controller: CustomDialogController
title: string=''
build() {
Row() {
Column({ space: 10 }) {
Text(this.title)
.fontSize(30)
.fontColor(Color.Blue)
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('cancel')
.onClick(() => {
this.controller.close()
}).backgroundColor(0xffffff).fontColor(Color.Black)
Button('confirm')
.onClick(() => {
this.controller.close()
}).backgroundColor(0xffffff).fontColor(Color.Red)
}.width("100%")
}.margin({ bottom: 10 })
}.height("50%")
}
}
@Entry
@Component
struct DialogTest01 {
@State dialogTitle: string = ''
@State dialogData: string = ''
dialogController2: CustomDialogController = new CustomDialogController({
builder: MyDialog2({
title: '弹窗2',
}),
alignment: DialogAlignment.Bottom,
customStyle: true
})
dialogController1: CustomDialogController = new CustomDialogController({
builder: MyDialog1({
controller2: this.dialogController2,
title: '弹窗1',
}),
alignment: DialogAlignment.Bottom,
customStyle: true
})
build() {
Row() {
Column({ space: 10 }) {
Button('点击打开弹窗1')
.onClick(() => {
this.dialogController1.open()
})
Button('点击打开弹窗2')
.onClick(() => {
this.dialogController2.open()
})
}.width("100%")
}.height("100%")
}
}
更多关于HarmonyOS 鸿蒙Next 一个页面里怎么引用两种自定义弹出框的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
Button().onclick()=>{
this.dialogController1.open()
}
Button().onclick()=>{
this.dialogController2.open()
}
在HarmonyOS(鸿蒙)系统中,若你需要在一个页面里引用两种自定义弹出框,可以通过以下方式实现:
首先,确保你已经定义了两个自定义弹出框组件。这通常意味着你有两个.hml
文件(描述弹出框的结构)和两个对应的.js
文件(处理弹出框的逻辑)。
在你的主页面(也就是需要引用这两个弹出框的页面)中,你可以通过import
语句或者组件引用的方式来使用这些自定义组件。例如,在.hml
文件中:
<element name="custom-popup1" src="path/to/your/first/popup.hml"></element>
<element name="custom-popup2" src="path/to/your/second/popup.hml"></element>
<!-- 使用自定义弹出框 -->
<custom-popup1 id="popup1"></custom-popup1>
<custom-popup2 id="popup2"></custom-popup2>
在.js
文件中,你可以通过this.$element('popup1').show()
和this.$element('popup2').show()
等方法来控制弹出框的显示和隐藏。
确保你的自定义组件已经正确注册,并且路径正确无误。如果弹出框的显示或逻辑处理有问题,检查组件间的数据传递和事件处理是否正确实现。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html