HarmonyOS 如何在全局使用loading组件?

HarmonyOS  如何在全局使用loading组件?

HarmonyOS
2024-09-27 12:08:09
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

参考示例如下:

import { WindowUtils } from '../util/WindowUtils';  
  
@Entry({routeName: 'Index'})  
@Component  
struct Index {  
  build() {  
    Column(){  
      Button('点击加载全局loading').onClick(()=>{  
        WindowUtils.showLoading(getContext(),'加载loading')  
        setTimeout(()=>{  
          WindowUtils.hideLoading();  
        }, 3000)  
      })  
  
    }  
  }  
}  
export const entryName : string = 'LoadingPage';  
@Entry({routeName: entryName, storage : LocalStorage.getShared()})  
@Component  
export struct LoadingPage {  
  @StorageProp('loading_message') message: string = '请稍候...'  
  
  build() {  
    Stack({ alignContent: Alignment.Center }) {  
      Column() {  
        LoadingProgress().width(30).height(30).color(Color.White)  
        Text(this.message ?? '请稍候...')  
          .fontColor(Color.White)  
          .fontSize(16)  
          .margin({ top: 15 })  
          .width('100%')  
          .textAlign(TextAlign.Center)  
      }  
      .justifyContent(FlexAlign.Center)  
      .width(100)  
      .height(100)  
      .backgroundColor('#88000000')  
      .borderRadius(8)  
    }  
    .width('100%')  
    .height('100%')  
    .backgroundColor('#19000000')  
  }  
}  
import { display, window } from '@kit.ArkUI'  
import { common } from '@kit.AbilityKit'  
import { BusinessError } from '@ohos.base';  
import * as LoadingPage from '../pages/LoadingPage';  
  
export class WindowUtils {  
  static showLoading(context: common.BaseContext, message: ResourceStr = '请稍候') {  
    window.createWindow({  
      name: 'loading_window',  
      windowType: window.WindowType.TYPE_DIALOG,  
      ctx: context  
    }, async (err: BusinessError, win) => {  
      const errCode: number = err.code;  
      if (errCode) {  
        console.error('Failed to create the window. Cause: ' + JSON.stringify(err));  
        return;  
      }  
      if (win) {  
        AppStorage.setOrCreate('loading_message', message)  
        await win.loadContentByName(LoadingPage.entryName);  
        win.setWindowBackgroundColor('#19000000')  
        let d = display.getDefaultDisplaySync()  
        await win.resize(d.width, d.height)  
        win.showWindow()  
      }  
    })  
  }  
  
  // static isHide():boolean {  
  // let windowClass: window.Window | undefined = undefined;  
  // try {  
  // windowClass = window.findWindow('loading_window')  
  // return true  
  // }catch (err){  
  // return false  
  // }  
  // }  
  //  
  static hideLoading(): Promise<void> {  
    return new Promise((resolve: Function)=>{  
      window.findWindow('loading_window')?.destroyWindow().then(()=>{  
        resolve()  
      }).catch(() => {  
        resolve()  
      });  
    })  
  }  
}
分享
微博
QQ
微信
回复
2024-09-27 17:41:53
相关问题
HarmonyOS 全局loading组件
299浏览 • 1回复 待解决
HarmonyOS 全局loading的菊花如何实现?
406浏览 • 1回复 待解决
HarmonyOS 是否有全局loading这种控件?
391浏览 • 1回复 待解决
HarmonyOS 没有全局的api loading动画
415浏览 • 1回复 待解决
HarmonyOS 如何简单使用全局变量?
449浏览 • 1回复 待解决
如何在Shadow DOM中应用全局样式?
161浏览 • 0回复 待解决
HarmonyOS 使用全局自定义弹窗
46浏览 • 1回复 待解决
HarmonyOS Loading提示插件问题
700浏览 • 1回复 待解决
组件如何动态设置全局唯一ID?
6951浏览 • 1回复 待解决
如何通过Progress实现loading效果?
414浏览 • 1回复 待解决