首页 > 数据库 > 数据库开发技术 > HarmonyOS NEXT实战:加载弹窗
##HarmonyOS Next实战##HarmonyOS应用开发##教育##
目标:封装公共组件,通过调用加载弹窗,实现loading动画。
实现思路:
CustomDialogController仅在作为@CustomDialog和@Component struct的成员变量,且在@Component struct内部定义时赋值才有效,具体用法可看下方示例。
定义
dialogController : CustomDialogController | null = new CustomDialogController(CustomDialogControllerOptions)
CustomDialogController用法
open() //显示自定义弹窗内容,允许多次使用,但如果弹框为SubWindow模式,则该弹框不允许再弹出SubWindow弹框。
close() //关闭显示的自定义弹窗,若已关闭,则不生效。
CustomDialogControllerOptions对象
具体实现:
import Response from '../../models/Response'
let loadingDialogController: CustomDialogController
@Component
struct LoadingDialog {
build() {
}
/**
* 打开弹窗
* @param text
*/
open(text: string, duration: number=1500) {
//关闭前面的弹窗
if (loadingDialogController) {
loadingDialogController.close()
}
loadingDialogController = new CustomDialogController({
builder: LoadingDialogView({
text: text,
duration:duration,
respond: (response: Response) => {
response.genericWork()
}
}),
autoCancel: false,
alignment: DialogAlignment.Center,
customStyle: true
})
loadingDialogController.open()
}
/**
* 关闭弹窗
*/
close() {
if (loadingDialogController) {
loadingDialogController.close()
}
}
}
export default new LoadingDialog()
@CustomDialog
struct LoadingDialogView {
dialogController: CustomDialogController
text: string = 'loading...'
duration: number = 1500
respond: (response: Response) => void = () => {
} //回应
aboutToAppear() {
setTimeout(() => {
this.dialogController.close()
}, this.duration)
}
build() {
Column({ space: 10 }) {
Progress({ value: 0, total: 100, type: ProgressType.Ring })
.width(50).height(50)
.style({ strokeWidth: 7, status: ProgressStatus.LOADING })
Text(this.text)
}.padding(16).backgroundColor(Color.White).borderRadius(8)
}
}
用法
LoadingDialog.open('正在获取最新版本...', 1000)
setTimeout(() => {
LoadingDialog.close()
TipDialog.open('温馨提示', '已是最新版本')
}, 1000)
原文作者:;如有侵权,请联系管理员删除。