harmonyOs ArkTS零基础 - 应用级变量的状态管理(四)

状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。

本文中T和S的含义如下:

类型描述
TClass,number,boolean,string和这些类型的数组形式。
Snumber,boolean,string。

AppStorage
Link
static Link(propName: string): any

与AppStorage中对应的propName建立双向数据绑定。如果给定的propName在AppStorage中存在,返回与AppStorage中propName对应属性的双向绑定数据。
双向绑定数据的修改会同步回AppStorage中,AppStorage会将变化同步到所有绑定该propName的数据和自定义组件中。
如果AppStorage中不存在propName,则返回undefined。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
any返回双向绑定的数据,如果AppStorage不存在对应的propName,则返回undefined。
AppStorage.SetOrCreate('PropA', 47);
let linkToPropA1 = AppStorage.Link('PropA');
let linkToPropA2 = AppStorage.Link('PropA'); // linkToPropA2.get() == 47
linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48

双向绑定数据的修改会同步回AppStorage中,AppStorage会将变化同步到所有绑定该propName的数据和自定义组件中。


import router from '@ohos.router';



struct Storage {
  onPageShow() {
    AppStorage.SetOrCreate("PropA", 47)
    let linkToPropA1 = AppStorage.Link('PropA');
    let linkToPropA2 = AppStorage.Link('PropA');
    console.info("AppStorage" + linkToPropA2.get())
    console.info("---------------------------------------------------------")
    linkToPropA1.set(48);
    console.info("AppStorage" + linkToPropA1.get())
    console.info("---------------------------------------------------------")
  }

  build() {
    Column() {
      Text("AppStorage测试")
        .width('100%')
        .height(50)
        .onClick(() => {
          router.pushUrl({
            url: 'pages/two/Second',
          }, router.RouterMode.Single)
        })
    }
  }
}

06-07 18:43:24.154 4852-1709/? I 0FEFE/JsApp: AppStorage47
06-07 18:43:24.154 4852-1709/? I 0FEFE/JsApp: AppStorage48


struct Second {
  aboutToAppear() {
    let linkToPropA1 = AppStorage.Link('PropA');
    let linkToPropA2 = AppStorage.Link('PropA');
    console.info("AppStorage2" + linkToPropA2.get())
    console.info("---------------------------------------------------------")
    console.info("AppStorage2" + linkToPropA1.get())
  }

  build() {

  }
}
06-07 18:43:25.735 4852-1709/com.beijing.naxx.myapplication I 0FEFE/JsApp: AppStorage248
06-07 18:43:25.736 4852-1709/com.beijing.naxx.myapplication I 0FEFE/JsApp: AppStorage248

SetAndLink
static SetAndLink(propName: string, defaultValue: T): SubscribedAbstractProperty

与Link接口类似,如果给定的propName在AppStorage中存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName,返回其双向绑定数据。

参数

参数名类型必填参数描述
propNamestringAppStorage中的属性名。
defaultValueT当propName在AppStorage中不存在,使用defaultValue在AppStorage中初始化对应的propName。

返回值:

类型描述
SubscribedAbstractPropertySubscribedAbstractProperty的实例,和AppStorage中propName对应属性的双向绑定的数据。


struct SetAndLink {
  onPageShow() {
    AppStorage.SetOrCreate("PropA", 47)
    let link1: SubscribedAbstractProperty<number> = AppStorage.SetAndLink("PropB", 49)
    let link2: SubscribedAbstractProperty<number> = AppStorage.SetAndLink("PropA", 50)

    console.info("AppStorage: ", link1.get())
    console.info("AppStorage: ", link2.get())
  }

  build() {

  }
}
06-07 19:01:45.361 8712-2792/? I 0FEFE/JsApp: AppStorage:  49
06-07 19:01:45.361 8712-2792/? I 0FEFE/JsApp: AppStorage:  47

与Link区别

LinkSetAndLink
返回双向绑定的数据,如果AppStorage不存在对应的propName,则返回undefined。当propName在AppStorage中不存在,使用defaultValue在AppStorage中初始化对应的propName。
如果propName存在,直接覆盖如果propName存在,不会覆盖原值

Prop
static Prop(propName: string): any

与AppStorage中对应的propName建立单向属性绑定。如果给定的propName在AppStorage中存在,则返回与AppStorage中propName对应属性的单向绑定数据。如果AppStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回AppStorage中。

参数

参数名类型必填描述
propNamestringAppStorage中的属性名。

返回值

类型描述
any返回单向绑定的数据,如果AppStorage不存在对应的propName,则返回undefined。
import router from '@ohos.router';


struct Prop {
  onPageShow() {
    AppStorage.SetOrCreate('PropA', 50);
    let prop1 = AppStorage.Prop("PropA")
    let prop2 = AppStorage.Prop("PropA")
    prop1.set(1)

    console.debug("Prop: "+prop1.get())
    console.debug("Prop: "+prop2.get())
  }

  build() {
    Column() {
      Text("Prop测试")
        .width('100%')
        .height(50)
        .onClick(() => {
          router.pushUrl({
            url: 'pages/two/Second',
          }, router.RouterMode.Single)
        })
    }
  }
}
06-07 20:36:13.480 30791-7850/? D 0FEFE/JsApp: Prop: 1
06-07 20:36:13.480 30791-7850/? D 0FEFE/JsApp: Prop: 50

单向绑定数据的修改不会被同步回AppStorage中

 AppStorage.SetOrCreate('PropA', 50);
 let prop1 = AppStorage.Prop("PropA")
 prop1.set(1)

Second



struct Second {
  aboutToAppear() {
    let prop1 = AppStorage.Prop("PropA")
    let prop2 = AppStorage.Prop("PropA")
    console.info("Prop2: " + prop1.get())
    console.info("---------------------------------------------------------")
    console.info("Prop2: " + prop2.get())
  }

  build() {

  }
}
06-07 20:36:23.936 30791-7850/com.beijing.naxx.myapplication I 0FEFE/JsApp: Prop2: 50
06-07 20:36:23.936 30791-7850/com.beijing.naxx.myapplication I 0FEFE/JsApp: Prop2: 50

SetAndProp
static SetAndProp<“S”>(propName: string, defaultValue: S): SubscribedAbstractProperty<“S”>

与Prop接口类似。如果给定的propName在AppStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName对应的属性,返回其单向绑定数据。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。
defaultValueS当propName在AppStorage中不存在时,使用default在AppStorage中初始化对应的propName。

返回值:

类型描述
SubscribedAbstractProperty<“S”>SubscribedAbstractProperty<“S”>的实例。
AppStorage.SetOrCreate('PropA', 47);
let prop: SubscribedAbstractProperty<number> = AppStorage.SetAndProp('PropB', 49); // PropA -> 47, PropB -> 49

Has
static Has(propName: string): boolean

判断propName对应的属性是否在AppStorage中存在。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
boolean如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。
    if (AppStorage.Has("PropA")) {
      console.info("PropA:" + "存在")
    } else {
      console.info("PropA:" + "不存在")
    }
06-07 20:54:08.323 2581-8941/? I 0FEFE/JsApp: PropA:存在

Get
static Get(propName: string): T | undefined

获取propName在AppStorage中对应的属性。如果不存在返回undefined。

参数

参数名类型必填描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
T undefinedAppStorage中propName对应的属性,如果不存在返回undefined。


struct Prop {
  onPageShow() {
    AppStorage.SetOrCreate('PropA', 47);
    let value: number = AppStorage.Get('PropA'); //

    console.debug("Get: " + value)

  }

  build() {

  }
}
06-07 20:57:52.024 3485-9186/? D 0FEFE/JsApp: Get: 47

Set
static Set(propName: string, newValue: T): boolean

在AppStorage中设置propName对应属性的值。如果newValue的值和propName对应属性的值相同,即不需要做赋值操作,状态变量不会通知UI刷新propName对应属性的值。

参数

参数名类型必填描述
propNamestringAppStorage中的属性名。
newValueT属性值,不能为undefined或null。

返回值:

类型描述
boolean如果AppStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功则返回true


struct Prop {
  onPageShow() {
    AppStorage.SetOrCreate('PropA', 48);
    let res: boolean = AppStorage.Set('PropA', 47)
    let res1: boolean = AppStorage.Set('PropB', 47)


    console.debug("Set: " + res)
    console.debug("Set: " + res1)

  }

  build() {

  }
}

06-07 21:02:02.097 4607-9483/? D 0FEFE/JsApp: Set: true
06-07 21:02:02.097 4607-9483/? D 0FEFE/JsApp: Set: false

SetOrCreate
static SetOrCreate(propName: string, newValue: T): void

如果propName已经在AppStorage中存在,并且newValue和propName对应属性的值不同,则设置propName对应属性的值为newValue,否则状态变量不会通知UI刷新propName对应属性的值。

如果propName不存在,则创建propName属性,值为newValue。setOrCreate只可以创建单个AppStorage的键值对,如果想创建多个AppStorage键值对,可以多次调用此方法。

参数:

参数名类型必填描述
propNamestringAppStorage中的属性名。
newValueT属性值,不能为undefined或null。
AppStorage.SetOrCreate('simpleProp', 121);

Delete
static Delete(propName: string): boolean

在AppStorage中删除propName对应的属性。

在AppStorage中删除该属性的前提是必须保证该属性没有订阅者。如果有订阅者,则返回false。删除成功返回true。

属性的订阅者为Link、Prop等接口绑定的propName,以及@StorageLink(‘propName’)和@StorageProp(‘propName’)。这就意味着如果自定义组件中使用@StorageLink(‘propName’)和@StorageProp(‘propName’)或者SubscribedAbstractProperty实例依旧对propName有同步关系,则该属性不能从AppStorage中删除。

参数

参数名类型必填描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
boolean如果AppStorage中有对应的属性,且该属性已经没有订阅者,则删除成功,返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。
AppStorage.SetOrCreate('PropA', 47);
AppStorage.Link('PropA');
let res: boolean = AppStorage.Delete('PropA'); // false, PropA still has a subscriber

AppStorage.SetOrCreate('PropB', 48);
let res1: boolean = AppStorage.Delete('PropB'); // true, PropB is deleted from AppStorage successfully

Keys
static Keys(): IterableIterator

返回AppStorage中所有的属性名。

返回值:

类型描述
IterableIteratorAppStorage中所有的属性名。


struct Prop {
  onPageShow() {
    AppStorage.SetOrCreate('PropB', 48);
    AppStorage.SetOrCreate('PropC', 49);
    AppStorage.SetOrCreate('PropD', 50);
    let keys: IterableIterator<string> = AppStorage.Keys()

    for (let key of keys) {
      console.log("AppStorageKeys: " + key);
    }

  }

  build() {

  }
}
06-07 21:40:49.378 15152-12073/? I 0FEFE/JsApp: AppStorageKeys: PropB
06-07 21:40:49.379 15152-12073/? I 0FEFE/JsApp: AppStorageKeys: PropC
06-07 21:40:49.379 15152-12073/? I 0FEFE/JsApp: AppStorageKeys: PropD

Clear9+
static Clear(): boolean

清除AppStorage的所有的属性。在AppStorage中清除所有属性的前提是,已经没有任何订阅者。如果有,则什么都不做返回false;删除成功返回true。

返回值:

类型描述
boolean删除所有的属性,如果当前有状态变量依旧引用此属性,返回false。


struct Prop {
  onPageShow() {
    AppStorage.SetOrCreate('PropB', 48);
    AppStorage.SetOrCreate('PropC', 49);
    AppStorage.SetOrCreate('PropD', 50);

    let simple = AppStorage.Clear();
    if (simple) {
      console.info("staticClear:" + " 删除成功")
    } else {
      console.info("staticClear:" + " 删除失败")
    }
  }

  build() {

  }
}
06-07 21:45:15.853 16799-12433/? I 0FEFE/JsApp: staticClear: 删除成功

进一步验证,是否删除



struct Prop {
  onPageShow() {
    AppStorage.SetOrCreate('PropB', 48);
    AppStorage.SetOrCreate('PropC', 49);
    AppStorage.SetOrCreate('PropD', 50);

    let simple = AppStorage.Clear();
    if (simple) {
      console.info("staticClear:" + " 删除成功")
    } else {
      console.info("staticClear:" + " 删除失败")
    }

    if (  AppStorage.Has("PropB")) {
      console.info("Has:" + " PropB 存在")
    } else {
      console.info("Has:" + " PropB 已被删除")
    }

  }

  build() {

  }
}
06-07 21:47:35.970 17420-12597/? I 0FEFE/JsApp: HasPropB 已被删除

IsMutable
static IsMutable(propName: string): boolean

返回AppStorage中propName对应的属性是否是可变的。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
boolean返回AppStorage中propNam对应的属性是否是可变的。



struct Prop {
  onPageShow() {
    AppStorage.SetOrCreate('PropB', 48);

    let res: boolean = AppStorage.IsMutable('PropB');

    if (res) {
      console.info("IsMutable:"+"PropB 可变")
    }else {
      console.info("IsMutable:"+"PropB 不可变")
    }

  }

  build() {

  }
}
06-07 21:57:55.865 19601-13218/? I 0FEFE/JsApp: IsMutablePropB 可变

Size
static Size(): number

返回AppStorage中的属性数量。

返回值:

类型描述
number返回AppStorage中属性的数量。


struct Prop {
  onPageShow() {
    AppStorage.SetOrCreate('PropB', 48);
    AppStorage.SetOrCreate('PropB', 48); //增加重复一条数据,输出size 1 ,说明重复数据无效

    let res: number = AppStorage.Size()
    console.info("Size1:" + res)


    AppStorage.SetOrCreate('Propc', 48);
    let res2: number = AppStorage.Size()
    console.info("Size2:" + res2)


  }

  build() {

  }
}
06-07 22:07:31.030 23021-14058/? I 0FEFE/JsApp: Size11
06-07 22:07:31.030 23021-14058/? I 0FEFE/JsApp: Size22

LocalStorage9+

constructor9+
constructor(initializingProperties?: Object)

创建一个新的LocalStorage实例。使用Object.keys(initializingProperties)返回的属性和其数值,初始化LocalStorage实例。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
initializingPropertiesObject用initializingProperties包含的属性和数值初始化LocalStorage。initializingProperties不能为undefined。



struct Prop {
  onPageShow() {
	//创建方式一
    let storageA: LocalStorage = new LocalStorage();
    storageA.setOrCreate("PropA", 47)

    console.info("LocalStorage:" + storageA.get("PropA"))

	//创建方式二
    let storageB: LocalStorage = new LocalStorage({ 'PropB': 48 });
    console.info("LocalStorage:" + storageB.get("PropB"))
  }

  build() {

  }
}
06-07 22:15:20.800 25029-14597/? I 0FEFE/JsApp: LocalStorage47
06-07 22:15:20.831 25029-14597/? I 0FEFE/JsApp: LocalStorage48

GetShared9+
static GetShared(): LocalStorage
获取当前stage共享的LocalStorage实例。使用案例可参考将LocalStorage实例从UIAbility共享到一个或多个视图

从API version 9开始,该接口支持在ArkTS卡片中使用。

模型约束:此接口仅可在Stage模型下使用。

返回值:

类型描述
LocalStorage返回LocalStorage实例

  /**
     * Get current LocalStorage shared from stage.
     * @StageModelOnly
     * @form
     * @since 9
     */
    static GetShared(): LocalStorage;
    
let storage: LocalStorage = LocalStorage.GetShared();


has9+
has(propName: string): boolean

判断propName对应的属性是否在LocalStorage中存在。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。

返回值:

类型描述
boolean如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
storage.has('PropA'); // true

get9+
get(propName: string): T | undefined

获取propName在LocalStorage中对应的属性。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。

返回值:

类型描述
T undefinedLocalStorage中propName对应的属性,如果不存在返回undefined。
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let value: number = storage.get('PropA'); // 47

set9+
set(propName: string, newValue: T): boolean

在LocalStorage中设置propName对应属性的值。如果newValue的值和propName对应属性的值相同,即不需要做赋值操作,状态变量不会通知UI刷新propName对应属性的值。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名
newValueT属性值,不能为undefined或者null

返回值:

类型描述
boolean如果LocalStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功返回true
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let res: boolean = storage.set('PropA', 47); // true
let res1: boolean = storage.set('PropB', 47); // false

setOrCreate9+
setOrCreate(propName: string, newValue: T): boolean

如果propName已经在LoStorage中存在,并且newValue和propName对应属性的值不同,则设置propName对应属性的值为newValue,否则状态变量不会通知UI刷新propName对应属性的值。

如果propName不存在,则创建propName属性,值为newValue。setOrCreate只可以创建单个LocalStorage的键值对,如果想创建多个LocalStorage键值对,可以多次调用此方法。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名
newValueT属性值,不能为undefined或者null

返回值:

类型描述
boolean如果设置的newValue是undefined或者null,返回false。
如果LocalStorage存在propName,则更新其值为newValue,返回true。
如果LocalStorage不存在propName,则创建propName,并初始化其值为newValue,返回true
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let res: boolean =storage.setOrCreate('PropA', 121); // true
let res1: boolean =storage.setOrCreate('PropB', 111); // true
let res2: boolean =storage.setOrCreate('PropB', undefined); // false

link9+
link(propName: string): SubscribedAbstractProperty

如果给定的propName在LocalStorage实例中存在,则返回与LocalStorage中propName对应属性的双向绑定数据。

双向绑定数据的修改会被同步回LocalStorage中,LocalStorage会将变化同步到所有绑定该propName的数据和Component中。

如果LocalStorage中不存在propName,则返回undefined。

从API version 9开始,该接口支持在ArkTS卡片中使用

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名

返回值:

类型描述
SubscribedAbstractPropertySubscribedAbstractProperty的实例,如果AppStorage不存在对应的propName,再返回undefined。
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let linkToPropA1: SubscribedAbstractProperty<number> = storage.link('PropA');
let linkToPropA2: SubscribedAbstractProperty<number> = storage.link('PropA'); // linkToPropA2.get() == 47
linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48

setAndLink9+
setAndLink(propName: string, defaultValue: T): SubscribedAbstractProperty

与Link接口类似,如果给定的propName在LocalStorage存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在LocalStorage创建和初始化propName,返回其双向绑定数据。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数名类型必填参数描述
propNamestringLocalStorage中的属性名
defaultValueT当propName在LocalStorage中不存在,使用default在LocalStorage中初始化对应的propName。

返回值:

类型描述
SubscribedAbstractProperty<“T”>SubscribedAbstractProperty的实例,如果AppStorage不存在对应的propName,再返回undefined。
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let link1: SubscribedAbstractProperty<number> = storage.setAndLink('PropB', 49); // Create PropB 49
var link2: SubscribedAbstractProperty<number> = storage.setAndLink('PropA', 50); // PropA exists, remains 47

prop9+
prop<“S">(propName: string): SubscribedAbstractProperty<”S“>

如果给定的propName在LocalStorage存在,则返回与LocalStorage中propName对应属性的单向绑定数据。如果LocalStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回LocalStorage中。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名

返回值:

类型描述
SubscribedAbstractProperty<”S“>SubscribedAbstractProperty<”S“>的实例,如果AppStorage不存在对应的propName,则返回undefined
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let prop1: SubscribedAbstractProperty<number> = storage.prop('PropA');
let prop2: SubscribedAbstractProperty<number> = storage.prop('PropA');
prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47

setAndProp9+
setAndProp<”S>(propName: string, defaultValue: S): SubscribedAbstractProperty<“S>

propName在LocalStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在LocalStorage创建和初始化propName对应的属性,返回其单向绑定数据

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名
defaultValueS当propName在AppStorage中不存在,使用default在AppStorage中初始化对应的propName

返回值:

类型描述
SubscribedAbstractProperty<”S>SubscribedAbstractProperty<“S>的实例,和AppStorage中propName对应属性的单向绑定的数据
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let prop: SubscribedAbstractProperty<number> = storage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49

delete9+
delete(propName: string): boolean

在LocalStorage中删除propName对应的属性。删除属性的前提是该属性已经没有订阅者,如果有则返回false。删除成功则返回true。

属性的订阅者是link,prop接口绑定的propName,以及@LocalStorageLink(‘propName’)和@LocalStorageProp(‘propName’)。如果自定义组件Component中使用或者SubscribedAbstractProperty(link和prop接口的返回类型)依旧有同步关系,则该属性不能从LocalStorage中删除。

从API version 9开始,该接口支持在ArkTS卡片中使用。
参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名

返回值:

类型描述
boolean如果LocalStorage中有对应的属性,且该属性已经没有订阅者,则删除成功返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
storage.link('PropA');
let res: boolean = storage.delete('PropA'); // false, PropA still has a subscriber
let res1: boolean = storage.delete('PropB'); // false, PropB is not in storage
storage.setOrCreate('PropB', 48);
let res2: boolean = storage.delete('PropB'); // true, PropB is deleted from storage successfully

keys9+
keys(): IterableIterator<”string>

返回LocalStorage中所有的属性名。

从API version 9开始,该接口支持在ArkTS卡片中使用。

返回值:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let keys: IterableIterator<string> = storage.keys();

size9+
size(): number

返回LocalStorage中的属性数量。

从API version 9开始,该接口支持在ArkTS卡片中使用。

返回值:

参数名参数描述
number返回键值对的数量。
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let res: number = storage.size(); // 1

clear9+
clear(): boolean

清除LocalStorage的所有的属性。在LocalStorage中清除所有属性的前提是已经没有任何订阅者。如果有则返回false;清除成功返回true。

从API version 9开始,该接口支持在ArkTS卡片中使用。
返回值:

类型描述
boolean如果LocalStorage中的属性已经没有任何订阅者,则清除成功,返回true。否则返回false
let storage: LocalStorage = new LocalStorage({ 'PropA': 47 });
let res: boolean = storage.clear(); // true, there are no subscribers

SubscribedAbstractProperty

get9+
abstract get(): T

读取从AppStorage/LocalStorage同步属性的数据。

从API version 9开始,该接口支持在ArkTS卡片中使用。

返回值:

类型描述
TAppStorage/LocalStorage同步属性的数据。
AppStorage.SetOrCreate('PropA', 47); 
let prop1 = AppStorage.Prop('PropA');    
prop1.get(); //  prop1.get()=47

set9+
abstract set(newValue: T): void

设置AppStorage/LocalStorage同步属性的数据。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

类型描述必填参数描述
newValueT要设置的数据
AppStorage.SetOrCreate('PropA', 47);
let prop1 = AppStorage.Prop('PropA');
prop1.set(1); //  prop1.get()=1

PersistentStorage

PersistProp
static PersistProp(key: string, defaultValue: T): void

将AppStorage中key对应的属性持久化到文件中。该接口的调用通常在访问AppStorage之前。

确定属性的类型和值的顺序如下:

  1. 如果PersistentStorage文件中存在key对应的属性,在AppStorage中创建对应的propName,并用在PersistentStorage中找到的key的属性初始化;
  2. 如果PersistentStorage文件中没有查询到key对应的属性,则在AppStorage中查找key对应的属性。如果找到key对应的属性,则将该属性持久化;
  3. 如果AppStorage也没查找到key对应的属性,则在AppStorage中创建key对应的属性。用defaultValue初始化其值,并将该属性持久化。

参数:

类型描述必填参数描述
keystring属性名。
defaultValueT在PersistentStorage和AppStorage未查询到时,则使用默认值初始化初始化它。不允许为undefined和null

AppStorage的属性向PersistentStorage中持久化的允许的类型是:
1: number,string,boolean,enum基础类型。
2: Object中可序列化的属性。
3: 不允许undefined和null。

PersistentStorage.PersistProp('highScore', '0');

DeleteProp
static DeleteProp(key: string): void

PersistProp的逆向操作。将key对应的属性从PersistentStorage删除,后续AppStorage的操作,对PersistentStorage不会再有影响

参数:

类型描述必填参数描述
keystringPersistentStorage中的属性名。
PersistentStorage.DeleteProp('highScore');

Keys
static Keys(): Array

返回所有持久化属性的key的数组。

返回值:

类型描述
Array<“string>返回所有持久化属性的key的数组
let keys: Array<string> = PersistentStorage.Keys();

Environment

EnvProp
static EnvProp<”S>(key: string, value: S): boolean

将Environment的内置环境变量key存入AppStorage中。如果系统中未查询到Environment环境变量key的值,则使用默认值value,存入成功,返回true。如果AppStorage已经有对应的key,则返回false。

所以建议在程序启动的时候调用该接口。

在没有调用EnvProp,就使用AppStorage读取环境变量是错误的。

参数:

参数名类型必填参数描述
keystring环境变量名称,支持的范围详见内置环境变量说明
valueS查询不到环境变量key,则使用value作为默认值存入AppStorage中。

返回值:

类型描述
boolean如果key对应的属性在AppStorage中存在,则返回false。不存在则在AppStorage中创建key对应的属性,返回true

Environment.EnvProp('accessibilityEnabled', 'default');

内置环境变量说明

key类型说明
accessibilityEnabledstring无障碍屏幕朗读是否启用
colorModeColorMode深浅色模式,可选值为:- ColorMode.LIGHT:浅色模式;- ColorMode.DARK:深色模式
fontScalenumber字体大小比例。
fontWeightScalenumber字重比例。
layoutDirectionLayoutDirection布局方向类型,可选值为:- LayoutDirection.LTR:从左到右;- LayoutDirection.RTL:从右到左
languageCodestring当前系统语言,小写字母,例如zh

EnvProps
static EnvProps(props: {key: string; defaultValue: any;}[]): void

和EnvProp类似,不同点在于参数为数组,可以一次性初始化多个数据。建议在应用启动时调用,将系统环境变量批量存入AppStorage中。

参数:

参数名类型必填参数描述
props{key: string, defaultValue: any}[]系统环境变量和默认值的键值对的数组。
Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { key: 'languageCode', defaultValue: 'en'}, { key: 'prop', defaultValue: 'hhhh' }]);

Keys
static Keys(): Array

返回环境变量的属性key的数组。

返回值:

类型描述
Array<“string>返回关联的系统项数组。
Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { key: 'languageCode', defaultValue: 'en' }, { key: 'prop', defaultValue: 'hhhh' }]);

let keys: Array<string> = Environment.Keys(); // accessibilityEnabled, languageCode, prop
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘了个刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值