HarmonyOS中如何在类中调用全局的弹窗
2025-06-14 15:39:33
247次阅读
0个评论
HarmonyOS中如何在类中调用全局的弹窗
前言
相信大家在开发中自定义弹窗都是用的@CustomDialog在每个页面都写一大堆初始化代码,并且在类中使用也是相当难调用,今天给老铁们分享使用promptAction.openCustomDialog去在类中调用全局的弹窗。
如何使用?
第一步
- 先到EntryAbility这个文件存取上下文(必要条件)  
onWindowStageCreate(windowStage: window.WindowStage): void {
  windowStage.loadContent('pages/Index', (err) => {
    window.getLastWindow(this.context).then((data: window.Window) => {
      let uiContext = data.getUIContext();
      AppStorage.setOrCreate<UIContext>('UIContext', uiContext);
    });
  });
}
- 
  写一个Builder(样式自定义)  
export class Params {
  text: ResourceStr = ""
  constructor(text: ResourceStr) {
    this.text = text;
  }
}
@Builder
export function testTextBuilder(params: Params) {
  Column() {
    Text(params.text)
      .textAlign(TextAlign.Center)
      .fontSize(20)
      .borderRadius(6)
      .backgroundColor('rgba(24, 25, 26, 0.85)')
      .fontColor($r('sys.color.comp_background_list_card'))
      .padding(16)
  }
}
- 万事俱备只欠东风(定义全局类)

export class DialogModel {
  static showDialog(message: string) {
    if (message != '') {
      let timeId: number = -1
      // 获取上下文
      let uiContext = AppStorage.get('UIContext') as UIContext
      let promptAction = uiContext.getPromptAction();
      let contentNode = new ComponentContent(uiContext, wrapBuilder(testTextBuilder), new Params(message));
      promptAction.openCustomDialog(contentNode, {
        isModal: false,
        onWillAppear: () => {
          timeId = setTimeout(() => {
            promptAction.closeCustomDialog(contentNode)
          }, 2000)
        },
        onDidDisappear: () => {
          clearTimeout(timeId)
        },
        keyboardAvoidMode: KeyboardAvoidMode.NONE,
        showInSubWindow: true,
      })
    }
  }
}
- 齐活开整
@Entry
@Component
struct Index {
  build() {
    Column() {
      Button('点我,我就给你个弹窗')
        .onClick(() => {
          DialogModel.showDialog('我就给你了')
        })
    }
  }
}
看看效果

不足
- 返回的时候会关闭弹窗(如果为吐司不需要关)
- 连续点击会一直弹出(有的需求需要打开一个弹窗关闭上一个弹窗)
- 返回的时候不想关闭弹窗,但是想要退出页面栈
00
- 0回答
- 0粉丝
- 0关注
相关话题
- 如何在Page中获取WindowStage实例
- 鸿蒙开发:父组件如何调用子组件中的方法?
- HarmonyOS NEXT父组件如何调用子组件的方法?
- 鸿蒙App是如何调用C++的?
- 如何调用系统拍照并获取图片
- harmony-utils之DialogUtil,弹窗工具类
- 如何使用第三方库中的picker_utils (API12) PickerUtil类
- OpenHarmony: 如何删除Record中的元素
- 如何在长按手势回调方法里获取手指触摸点的坐标
- uni-app/uniappx 中调用鸿蒙原生扫码能力的实践
- 应用中的“复制功能”如何实现##HarmonyOS应用开发##
- 【HarmonyOS 5】鸿蒙中如何使用MQTT
- 【HarmonyOS 5】鸿蒙中如何使用MQTT
- 如何使用第三方库中的@pura/harmony-utils(V1.3.3)申请授权工具类二
- 如何使用第三方库中的@pura/harmony-utils(V1.3.3)申请授权工具类一
