使用PersistentStorage保存全局变量供各组件使用。
PersistentStorage和UI实例相关联,持久化操作需要在UI实例初始化成功后(即loadContent传入的回调被调用时)才可以被调用,早于该时机调用会导致持久化失败。如下:
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',this.storage, (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
// 一定在loadContent()回调时初始化PersistentStorage
PersistentStorage.persistProp('token','');
PersistentStorage.persistProp('nickName','');
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
}
后续赋值时,用AppStorage赋值即可,如下:
if (user?.email) {
AppStorage.setOrCreate('token', user.token);
AppStorage.setOrCreate('nickName', user.nickname);
...
}
也可以直接用@StorageLink使用
// EntryAbility.ets文件种初始化。
PersistentStorage.persistProp('guidelineId','2');//临时 指南版本
// 组件种直接使用
@StorageLink('guidelineId') guidelineId: number = 0;
当guidelineId值改变时,如:
this.guidelineId==2
persistProp的值guidelineId也同步更新
总结如下:
当状态变量@StorageLink(‘guidelineId’) aProp改变,触发组件重新刷新。
@StorageLink装饰的变量是和AppStorage中建立双向同步的,所以@StorageLink(‘guidelineId’) guidelineId的变化会被同步回AppStorage中。
AppStorage中“guidelineId”属性的改变会同步到所有绑定该“aProp”的单向或者双向变量。
因为“aProp”对应的属性已经被持久化,所以在AppStorage中“aProp”的改变会触发PersistentStorage,将新的改变写入本地磁盘。