上一节,我们是通过在页面里创建 LocalStorage 实例,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。
其实,LocalStorage 也可以在 UIAbility 内,页面间共享状态。
在 EntryAbility 里初始化 LocalStorage 实例,存入一对数据,key为“name”,value为“EntryAbility”。
import UIAbility from '@ohos.app.ability.UIAbility';
/**
* 创建 LocalStorage 实例
*/
const localStorage: LocalStorage = new LocalStorage({ "name": "EntryAbility" })
export default class EntryAbility extends UIAbility {
}
然后,在 onWindowStageCreate 方法里加载页面,并指定 LocalStorage 实例。
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
/**
* 创建 LocalStorage 实例
*/
const localStorage: LocalStorage = new LocalStorage({ "name": "EntryAbility" })
export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: window.WindowStage) {
// 加载 Index 页面,并指定 LocalStorage
windowStage.loadContent(PagePaths.INDEX, localStorage);
}
}
到这里,Ability 里面的工作就完成了。
接下来,我们来编写 Index 页面。
在 Index 页面的顶部,通过 LocalStorage.GetShared() 函数获取到 Ability 传过来的 LocalStorage。
/**
* 通过 GetShared() 获取 Ability 传递过来的 LocalStorage
*/
const storage: LocalStorage = LocalStorage.GetShared()
@Entry()
@Component
struct Index {
build() {
}
}
然后,将 LocalStorage 与 @Entry 装饰器进行绑定。
@Entry(storage)
@Component
struct Index {
build() {
}
}
接着,定义一个 @LocalStorageLink 装饰的变量 name。
@Entry(storage)
@Component
struct Index {
/**
* 状态变量
*/
@LocalStorageLink("name") name: string = "Index"
}
最后,在 build 函数中显示 name 的值。
/**
* 通过 GetShared() 获取 Ability 传递过来的 LocalStorage
*/
const storage: LocalStorage = LocalStorage.GetShared()
@Entry(storage)
@Component
struct Index {
/**
* 状态变量
*/
@LocalStorageLink("name") name: string = "Index"
build() {
Column() {
Text(this.name)
}
.width('100%')
}
}
如果界面上显示“EntryAbility”,说明 LocalStorage 共享成功。
如果界面上显示“Index”,说明 LocalStorage 共享失败。
运行结果:
从运行结果来看,界面上显示“EntryAbility”,说明页面与 Ability 共享 LocalStorage 成功。
LocalStorage 的生命周期是怎样的呢?
应用程序决定 LocalStorage 对象的生命周期。当应用释放最后一个指向 LocalStorage 的引用时,比如销毁最后一个自定义组件,LocalStorage 将被 JS Engine 垃圾回收。