能不能手写一个提示框,通过方法调用的形式展示loading提示框。

能不能手写一个提示框,通过方法调用的形式展示loading提示框。在任何地方都可以调用的那种,并不是一定要在组件内部调用。

HarmonyOS
2024-09-04 09:01:37
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

思路:promptAction想要实现全局弹框,需要绑定this,但是在util工具类中没有this。需要在先把this通过GlobalContext存起来,使用时取出。openCustomDialog返回的对话框id。参数名:dialogId 。可以通过指定dialogId 关闭对应的对话框。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5#promptactionclosecustomdialog11

参考demo:

在首页中把this存到GlobalContext

import { GlobalContext } from './GlobalContext' 
import { router } from '@kit.ArkUI' 
 
@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World' 
 
  aboutToAppear(): void { 
    GlobalContext.getContext().setObject('UIContext', this) 
  } 
 
  build() { 
    Row() { 
      Column() { 
        Text('Page') 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            router.pushUrl({ 
              url:'pages/Page' 
            }) 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
 
    .backgroundColor(Color.Orange) 
  } 
}

跳转Page页面开启弹窗1。延时1s后,关闭弹窗1,开启弹窗2。

import { testPromptDialog } from './HttpUtil'; 
 
@Entry 
@Component 
struct Page { 
  @State message: string = 'Hello World'; 
 
  build() { 
    Row() { 
      Column() { 
        Text('开启弹窗') 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            testPromptDialog(1) 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

HttpUtil.ets

import { GlobalContext } from './GlobalContext'; 
import promptAction from '@ohos.promptAction'; 
 
 
let customDialogId1: number = 0 
 
let customDialogId2: number = 0 
 
// 弹窗1 
@Builder 
export function customDialogBuilder1(content: String) { 
  Column() { 
    Text(`Tip: ${content} `).fontSize(20).height("30%") 
    Row() { 
      Button("确认").onClick(() => { 
        promptAction.closeCustomDialog(customDialogId1) 
      }) 
      Blank().width(50) 
      Button("取消").onClick(() => { 
        promptAction.closeCustomDialog(customDialogId1) 
      }) 
    } 
    .margin({ top: 30 }) 
  }.height(200).padding(5) 
} 
 
// 弹窗2 
@Builder 
export function customDialogBuilder2(content: String) { 
  Column() { 
    Text(`Tip: ${content} `).fontSize(20).height("30%") 
    Row() { 
      Button("确认").onClick(() => { 
        promptAction.closeCustomDialog(customDialogId2) 
      }) 
      Blank().width(50) 
      Button("取消").onClick(() => { 
        promptAction.closeCustomDialog(customDialogId2) 
      }) 
    } 
    .margin({ top: 30 }) 
  }.height(200).padding(5) 
} 
 
export function testPromptDialog(index: number) { 
  clearTimeout(0) 
  const that = GlobalContext.getContext().getObject('UIContext') as UIContext; 
 
  if (index === 1) { 
    // 打开弹窗1 
    if (that) { 
      promptAction.openCustomDialog({ 
        builder: customDialogBuilder1.bind(that, "弹窗1") 
      }).then((dialogId: number) => { 
        customDialogId1 = dialogId; 
      }) 
    } 
  } 
  //  延时1后 关闭弹窗1,打开弹窗2 
  setTimeout(() => { 
    promptAction.closeCustomDialog(customDialogId1) 
    if (that) { 
      promptAction.openCustomDialog({ 
        builder: customDialogBuilder2.bind(that, "弹窗2") 
      }).then((dialogId: number) => { 
        customDialogId2 = dialogId; 
      }) 
    } 
  }, 1000) 
 
}

GlobalContext.ets

export class GlobalContext { 
  private constructor() { 
  } 
 
  private static instance: GlobalContext; 
  private _objects = new Map<string, Object>(); 
 
  public static getContext(): GlobalContext { 
    if (!GlobalContext.instance) { 
      GlobalContext.instance = new GlobalContext(); 
    } 
    return GlobalContext.instance; 
  } 
 
  getObject(value: string): Object | undefined { 
    return this._objects.get(value); 
  } 
 
  setObject(key: string, objectClass: Object): void { 
    this._objects.set(key, objectClass); 
  } 
}
分享
微博
QQ
微信
回复
2024-09-04 15:22:26
相关问题
两SQL语句能不能一个SQL搞定?
2710浏览 • 1回复 待解决
如何实现一个自定义询问
288浏览 • 1回复 待解决
HarmonyOS通过方法调用loading有吗?
286浏览 • 0回复 待解决
@State能不能装饰接口
724浏览 • 1回复 待解决
js如何清空一个input 输入内容
7561浏览 • 1回复 待解决
HarmonyOS 如何实现一个气泡聊天
231浏览 • 1回复 待解决
电脑能不能刷鸿蒙系统
15689浏览 • 14回复 待解决
cmake编译时候信息能不能
478浏览 • 1回复 待解决
如何封装一个自定义Dialog对话
2061浏览 • 1回复 待解决
HarmonyOS Camera_CaptureSession 能不能重用
257浏览 • 1回复 待解决
华为能不能做个快捷指令?
7425浏览 • 1回复 待解决
HarmonyOS Loading提示插件问题
345浏览 • 1回复 待解决
File公有目录是不能不能创建 ?
2756浏览 • 1回复 待解决