HarmonyOS 鸿蒙Next在自定义组件中,如何获取在EntryAbility中存储的AppStorage信息

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next在自定义组件中,如何获取在EntryAbility中存储的AppStorage信息

在自定义组件中, 如何获取在 EntryAbility 中存储的 AppStorage 信息。查看了此文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-appstorage-V5,未能理解,自定义组件是如何进行存储值的获取?? 1.在 main=> ets => entryability => EntryAbility.ets 中的 onWindowStageCreate 生命周期中,设置获取到 窗口的

import displayManager from ‘@ohos.display’

let displayManagerInstance = displayManager.getDefaultDisplaySync() AppStorage.setOrCreate(‘displayWidth’, displayManagerInstance.width); AppStorage.setOrCreate(‘densityPixels’, displayManagerInstance.densityPixels); AppStorage.setOrCreate(‘displayWidthVp’, displayManagerInstance.width / displayManagerInstance.densityPixels)

2.在自定义组件组件中,通过  下方代码“获取” 存储在 AppStorage 中的 displayWidthVp 值,无法获取到

AppStorage.get<number>(‘displayWidthVp’) as number

3.在 页面中,使用下方代码是能够获取到的

AppStorage.get<number>(‘displayWidthVp’) as number


更多关于HarmonyOS 鸿蒙Next在自定义组件中,如何获取在EntryAbility中存储的AppStorage信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

试了一下,是可以的。在页面加载成功后获取屏幕数据


onWindowStageCreate(windowStage: window.WindowStage): void {

    // Main window is created, set main page for this ability

    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    windowStage.loadContent('pages/Index', (err, data) => {

      if (err.code) {

        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');

        return;

      }

      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');

      let displayManagerInstance = displayManager.getDefaultDisplaySync()

      AppStorage.setOrCreate('displayWidth', displayManagerInstance.width);

      AppStorage.setOrCreate('densityPixels', displayManagerInstance.densityPixels);

      AppStorage.setOrCreate('displayWidthVp', displayManagerInstance.width / displayManagerInstance.densityPixels );

    });

  }

在自定义组件中获取值


[@Component](/user/Component)

struct showDemo {

  [@State](/user/State) displayWidthVp: number = 0;

  aboutToAppear(): void {

    this.displayWidthVp = AppStorage.get<number>('displayWidthVp') as number

    console.info(' 屏幕宽度 vp值:' + this.displayWidthVp)

  }

  build() {

    Row() {

      Column() {

        Text('屏幕宽度:' + this.displayWidthVp)

          .fontSize(50) .fontWeight(FontWeight.Bold)

      }

      .width('100%')

    }

    .height('100%')

  }

}

更多关于HarmonyOS 鸿蒙Next在自定义组件中,如何获取在EntryAbility中存储的AppStorage信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


用装饰器就可以了,不需要用代码去获取,代码获取只有代码执行到的时候,才会去获取值,值如果有更新,你没去重新执行获取的代码那就还是初始值;用装饰器的话,那个参数变化会引起使用哪个参数的视图重新渲染,不需要我们去处理值变化的问题。

[@StorageLink](/user/StorageLink)('displayWidthVp') displayWidthVp: number = 0

在HarmonyOS鸿蒙Next系统中,若想在自定义组件中获取在EntryAbility中存储的AppStorage信息,可以通过以下步骤实现:

  1. 确保AppStorage已正确存储:在EntryAbility中,使用AppStorage API存储数据。确保存储的Key和Value正确无误。

  2. 获取AppStorage实例:在自定义组件中,通过AppStorageManager获取与EntryAbility相同的AppStorage实例。这通常涉及到传递AppStorage的引用或Key到组件中。

  3. 读取数据:使用AppStorage实例的get方法,根据存储时使用的Key来读取数据。确保数据类型与存储时一致,以避免类型转换错误。

  4. 处理数据:读取到数据后,可以在组件中进行相应的处理或显示。

示例代码(伪代码):

// 在EntryAbility中存储数据
AppStorage appStorage = AppStorageManager.getAppStorageByContext(this);
appStorage.put("myKey", "myValue");

// 在自定义组件中获取数据
AppStorage appStorage = // 获取与EntryAbility相同的AppStorage实例(可能通过依赖注入等方式)
String value = appStorage.get("myKey", String.class);

// 使用读取到的数据

请注意,实际代码可能需要根据具体情况调整,特别是如何获取与EntryAbility相同的AppStorage实例。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部