HarmonyOS 鸿蒙Next在自定义组件中,如何获取在EntryAbility中存储的AppStorage信息
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
试了一下,是可以的。在页面加载成功后获取屏幕数据
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
信息,可以通过以下步骤实现:
-
确保AppStorage已正确存储:在
EntryAbility
中,使用AppStorage
API存储数据。确保存储的Key和Value正确无误。 -
获取AppStorage实例:在自定义组件中,通过
AppStorageManager
获取与EntryAbility
相同的AppStorage
实例。这通常涉及到传递AppStorage
的引用或Key到组件中。 -
读取数据:使用
AppStorage
实例的get
方法,根据存储时使用的Key来读取数据。确保数据类型与存储时一致,以避免类型转换错误。 -
处理数据:读取到数据后,可以在组件中进行相应的处理或显示。
示例代码(伪代码):
// 在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。