HarmonyOS dialog调用open方法,不显示

封装了一个网络请求的HttpUtil,想在加载的时候出现一个loading,采用的是自定义dialog的方法,传入了一个LoadingDialog(),然后在interceptors拦截请求的时候调用open方法打开dialog,但是无法显示,请问是什么原因,如何优化。

HarmonyOS
2024-10-28 11:03:43
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

​由于CustomDialogController仅在作为@CustomDialog和@Component struct的成员变量,且在@Component struct内部定义时赋值才有效,这边推荐使用

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5

使用过程中会存在this获取不到的问题,这边提供下面解决方案:

1、创建一个全局Context,GlobalContext.etx:​

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);  
  }  
}

2、在当前页面的生命周期中设置全局【context】

aboutToAppear(): void {  
  GlobalContext.getContext().setObject('UIContext', this)  
}

3、在接口封装文件使用:

let customDialogId: number = 0  
@Builder  
export function customDialogBuilder(content: String, str: string) {  
  Column() {  
    Text(`Tip: ${content} ${str} `).fontSize(20).height("30%")  
    Text('失败原因:失败原因失败原因失败原因失败原因失败原因失败原因失败原因!').fontSize(16).height("30%")  
    Row() {  
      Button("确认").onClick(() => {  
        promptAction.closeCustomDialog(customDialogId)  
      })  
      Blank().width(50)  
      Button("取消").onClick(() => {  
        promptAction.closeCustomDialog(customDialogId)  
      })  
    }  
    .margin({top: 30})  
  }.height(200).padding(5)  
}  
export function query(){  
  const that = GlobalContext.getContext().getObject('UIContext') as UIContext;  
  if (that) {  
    promptAction.openCustomDialog({  
      builder: customDialogBuilder.bind(that, "网络请求失败!", '111111')  
    }).then((dialogId: number) => {  
      customDialogId = dialogId;  
    })  
  }  
}
分享
微博
QQ
微信
回复
2024-10-28 16:22:39
相关问题
HarmonyOS 自定义dialog open无效
261浏览 • 1回复 待解决
HarmonyOS CustomDialogController 不显示
286浏览 • 1回复 待解决
HarmonyOS web组件alert不显示
608浏览 • 1回复 待解决
HarmonyOS 用Navigation显示dialog问题
473浏览 • 1回复 待解决
HarmonyOS 自定义Dialog显示问题
434浏览 • 1回复 待解决
HarmonyOS 输入框不显示内容
54浏览 • 1回复 待解决
HarmonyOS web加载页面图片不显示
507浏览 • 1回复 待解决
HarmonyOS 网络图片加载不显示
102浏览 • 1回复 待解决
HarmonyOS web系统组件写css不显示
274浏览 • 1回复 待解决
HarmonyOS Image组件网络图片不显示
405浏览 • 1回复 待解决
harmony surfaceProvider绘制不显示问题
10209浏览 • 4回复 待解决
PopupDialog 不显示怎么回事?
7480浏览 • 2回复 待解决
harmonyos-webview-布局增加load不显示
6671浏览 • 3回复 待解决
HarmonyOS Web组件加载片段时候不显示
230浏览 • 1回复 待解决
HarmonyOS 使用 api11 地图不显示
514浏览 • 1回复 待解决
HarmonyOS API调用Dialog弹框
260浏览 • 0回复 待解决
HarmonyOS 自定义弹窗封装后不显示
358浏览 • 1回复 待解决