应用笔记 · 2025年6月25日

鸿蒙页面数据共享方案——ArkTS之LocalStorage与AppStorage的高效应用

LocalStorage 前言

LocalStorage 是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage支持UIAbility实例多个页面间状态共享。 可以直接理解为LocalStorage就是内存数据库,你可以往里面存放数据,LocalStorageAppStorage都是内存级别的存储方案。唯一不同的在于作用范围。

LocalStorage 解决问题及特性

  1. 在同一个EneryAlibity中多个页面可以实现数据共享,不同EneryAlibity无法实现数据共享。
  2. LocalStorage可以实现一个页面中定义了存储的数据,在他的子组件中都可以共享给这个内存的数据。
  3. 应用程序可以创建多个LocalStorage实例,LocalStorage实例可以在页面内共享,也可以通过getShared接口,实现跨页面、UIAbility实例内共享。
  4. 组件树的根节点,即被@Entry装饰的@Component,可以被分配一个LocalStorage实例,此组件的所有子组件实例将自动获得对该LocalStorage实例的访问权限。
  5. @Component装饰的组件既可以自动继承来自父组件的LocalStorage实例,也可以传入指定的LocalStorage的实例,详见:自定义组件接收LocalStorage实例。
  6. LocalStorage中的所有属性都是可变的。

LocalStorage代码的实现步骤:

第一步、创建初始化storage

方式一、先创建一个LocalStorage实例,通过构造函数初始化storage存储的数据

方式二、创建LocalStorage实例,通过实例方法来初始化storage存储的数据

第二步、绑定Storage

需要将Storage实例绑定给对应的entry装饰的组件,这样才能表达当前这个页面具有指定某一个storage内存状态,以后这个页面所有子组件都可以共享这一个storage对象。

第三步、获取storage数据

一、@LocalStorageProp:代表可以从页面级存储中获取数据。 二、@LocalStorageLink:可以从页面级别存储中获取数据或者修改数据。

ArkTS存储机制深入解析:LocalStorage与AppStorage的高效应用

第四步、修改数据的过程

ArkTS存储机制深入解析:LocalStorage与AppStorage的高效应用

LocalStorageProp中本地userName修改了,但是没有影响页面中存储的userName,而LocalStorageLink修改了页面存储的userName却没有修改本地存储的userName

第五步、子组件获取数据

StorageChildren页面:子节点可以通过link来实现数据的获取以及双向更新。父节点可以同步更新数据。

ArkTS存储机制深入解析:LocalStorage与AppStorage的高效应用

将LocalStorage共享到一个或多个视图

上面实例中,LocalStorage的实例仅仅在一个@Entry装饰的组件和其所有属性的子组件中共享,如果希望其在多个视图中共享,可以在所属的UIAbility中创建LocalStorage实例,并调用windowStage.loadContent EntryAbility.ets 文件:

ArkTS存储机制深入解析:LocalStorage与AppStorage的高效应用

首页获取UIAbility共享

效果: ArkTS存储机制深入解析:LocalStorage与AppStorage的高效应用

多个页面实时共享页面状态 首先在EntryAbility定义一个全局存储

现给Abilitry设置一个页面存储对象,这样才能保证这个Abilitry下面所有子页面都可以共享这个storage

子页面也需要引入共享状态Detail.ets

在页面中,通过getShared拿到数据storage对象,绑定到页面中

这样就可以在页面中通过prop装饰器来实现共享。如下效果,多个页面共享一个状态 ArkTS存储机制深入解析:LocalStorage与AppStorage的高效应用 注意事项:这个功能演示无法在预览器实现,必须要模拟器或者真机来实现,我们需要用到全局windo窗口Ability

AppStorage应用存储

AppStorage前言

应用存储那就意味着项目中任何页面都可以实现共享,不需要借助Abilitry来实现,类似于状态机,只要状态机有数据,页面就直接可以获取出来。

AppStorage使用格式

页面1

当进入项目中第一个页面发现又全局存储的对象PropA,判断全局存储里面是否又这个变量,如果有则获取这个变量的值拿到页面中使用,如果没有这个变量,将这个页面的初始化的值作为全局存储的结果。StorageLink初始化,更新,获取三个功能。

页面2

直接使用@StorageLink('PropA') storageLink:number = 0; 有的话就用,没有的话重新创建赋默认值,通过link可以实现在页面二修改全局的数据,通过prop只能实现获取数据,无法修改全局的数据。

效果: ArkTS存储机制深入解析:LocalStorage与AppStorage的高效应用

作者:天生我材必有用_吴用
链接:https://juejin.cn/post/7502769271626416168
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。