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无效
502浏览 • 1回复 待解决
HarmonyOS CustomDialogController 不显示
658浏览 • 1回复 待解决
HarmonyOS webloadData不显示内容
182浏览 • 1回复 待解决
HarmonyOS toast不显示问题
71浏览 • 1回复 待解决
HarmonyOS 应用图标不显示
332浏览 • 1回复 待解决
HarmonyOS push通知不显示图片
125浏览 • 1回复 待解决
HarmonyOS Web组件不显示图片
90浏览 • 1回复 待解决
HarmonyOS web组件alert不显示
1079浏览 • 1回复 待解决
HarmonyOS 应用使用iconfont不显示
207浏览 • 1回复 待解决
HarmonyOS 用Navigation显示dialog问题
797浏览 • 1回复 待解决
HarmonyOS RelativeContainer内的控件不显示
151浏览 • 1回复 待解决
HarmonyOS 输入框不显示内容
289浏览 • 1回复 待解决
HarmonyOS 网络图片加载不显示
505浏览 • 1回复 待解决
HarmonyOS web加载页面图片不显示
914浏览 • 1回复 待解决
PopupDialog 不显示怎么回事?
7736浏览 • 2回复 待解决
harmony surfaceProvider绘制不显示问题
10350浏览 • 4回复 待解决
HarmonyOS 自定义Dialog显示问题
778浏览 • 1回复 待解决