HarmonyOS dialog调用open方法,不显示

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

HarmonyOS
2024-10-28 11:03:43
874浏览
收藏 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);  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

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

aboutToAppear(): void {  
  GlobalContext.getContext().setObject('UIContext', this)  
}
  • 1.
  • 2.
  • 3.

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;  
    })  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
分享
微博
QQ
微信
回复
2024-10-28 16:22:39
相关问题
HarmonyOS 自定义dialog open无效
949浏览 • 1回复 待解决
HarmonyOS CustomDialogController 不显示
1193浏览 • 1回复 待解决
HarmonyOS webloadData不显示内容
586浏览 • 1回复 待解决
HarmonyOS toast不显示问题
688浏览 • 1回复 待解决
HarmonyOS 应用图标不显示
938浏览 • 1回复 待解决
HarmonyOS Web组件不显示图片
656浏览 • 1回复 待解决
HarmonyOS push通知不显示图片
602浏览 • 1回复 待解决
HarmonyOS 应用使用iconfont不显示
700浏览 • 1回复 待解决
HarmonyOS web组件alert不显示
1809浏览 • 1回复 待解决
HarmonyOS 输入框不显示内容
938浏览 • 2回复 待解决
HarmonyOS 网络图片加载不显示
1321浏览 • 1回复 待解决
HarmonyOS web加载页面图片不显示
1470浏览 • 1回复 待解决
HarmonyOS RelativeContainer内的控件不显示
577浏览 • 1回复 待解决
HarmonyOS 用Navigation显示dialog问题
1385浏览 • 1回复 待解决
HarmonyOS Web组件加载片段时候不显示
802浏览 • 1回复 待解决
harmonyos-webview-布局增加load不显示
7306浏览 • 3回复 待解决
HarmonyOS 使用 api11 地图不显示
1339浏览 • 1回复 待解决