1# 应用级变量的状态管理 2 3 4状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。 5 6 7>**说明:** 8> 9>本模块首批接口从API version 7开始支持,后续版本的新增接口,采用上角标单独标记接口的起始版本。 10 11 12本文中T和S的含义如下: 13 14 15| 类型 | 描述 | 16| ---- | -------------------------------------- | 17| T | Class,number,boolean,string和这些类型的数组形式。 | 18| S | number,boolean,string。 | 19 20 21## AppStorage 22 23 24### Link 25 26static Link(propName: string): any 27 28与AppStorage中对应的propName建立双向数据绑定。如果给定的propName在AppStorage中存在,返回与AppStorage中propName对应属性的双向绑定数据。 29 30双向绑定数据的修改会同步回AppStorage中,AppStorage会将变化同步到所有绑定该propName的数据和自定义组件中。 31 32如果AppStorage中不存在propName,则返回undefined。 33 34**参数:** 35 36| 参数名 | 类型 | 必填 | 参数描述 | 37| -------- | ------ | ---- | ---------------- | 38| propName | string | 是 | AppStorage中的属性名。 | 39 40**返回值:** 41 42| 类型 | 描述 | 43| ---- | ---------------------------------------- | 44| any | 返回双向绑定的数据,如果AppStorage不存在对应的propName,在返回undefined。 | 45 46 47```ts 48AppStorage.SetOrCreate('PropA', 47); 49let linkToPropA1 = AppStorage.Link('PropA'); 50let linkToPropA2 = AppStorage.Link('PropA'); // linkToPropA2.get() == 47 51linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48 52``` 53 54 55### SetAndLink 56 57static SetAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> 58 59与Link接口类似,如果给定的propName在AppStorage中存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName,返回其双向绑定数据。 60 61**参数:** 62 63| 参数名 | 类型 | 必填 | 参数描述 | 64| ------------ | ------ | ---- | ---------------------------------------- | 65| propName | string | 是 | AppStorage中的属性名。 | 66| defaultValue | T | 是 | 当propName在AppStorage中不存在,使用defaultValue在AppStorage中初始化对应的propName。 | 67 68**返回值:** 69 70| 类型 | 描述 | 71| ----------------------------------- | ---------------------------------------- | 72| SubscribedAbstractProperty<T> | SubscribedAbstractProperty<T>的实例,和AppStorage中propName对应属性的双向绑定的数据。 | 73 74 75```ts 76AppStorage.SetOrCreate('PropA', 47); 77let link1: SubscribedAbstractProperty<number> = AppStorage.SetAndLink('PropB', 49); // Create PropB 49 78let link2: SubscribedAbstractProperty<number> = AppStorage.SetAndLink('PropA', 50); // PropA exists, remains 47 79``` 80 81 82### Prop 83 84static Prop(propName: string): any 85 86与AppStorage中对应的propName建立单向属性绑定。如果给定的propName在AppStorage中存在,则返回与AppStorage中propName对应属性的单向绑定数据。如果AppStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回AppStorage中。 87 88>**说明:** 89> Prop仅支持简单类型。 90 91**参数:** 92 93| 参数名 | 类型 | 必填 | 参数描述 | 94| -------- | ------ | ---- | ---------------- | 95| propName | string | 是 | AppStorage中的属性名。 | 96 97**返回值:** 98 99| 类型 | 描述 | 100| ---- | ---------------------------------------- | 101| any | 返回单向绑定的数据,如果AppStorage不存在对应的propName,在返回undefined。 | 102 103 104```ts 105AppStorage.SetOrCreate('PropA', 47); 106let prop1 = AppStorage.Prop('PropA'); 107let prop2 = AppStorage.Prop('PropA'); 108prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47 109``` 110 111 112### SetAndProp 113 114static SetAndProp<S>(propName: string, defaultValue: S): SubscribedAbstractProperty<S> 115 116与Prop接口类似。如果给定的propName在AppStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName对应的属性,返回其单向绑定数据。 117 118**参数:** 119 120| 参数名 | 类型 | 必填 | 参数描述 | 121| ------------ | ------ | ---- | ---------------------------------------- | 122| propName | string | 是 | AppStorage中的属性名。 | 123| defaultValue | S | 是 | 当propName在AppStorage中不存在时,使用default在AppStorage中初始化对应的propName。 | 124 125**返回值:** 126 127| 类型 | 描述 | 128| ----------------------------------- | --------------------------------------- | 129| SubscribedAbstractProperty<S> | SubscribedAbstractProperty<S>的实例。 | 130 131 132```ts 133AppStorage.SetOrCreate('PropA', 47); 134let prop: SubscribedAbstractProperty<number> = AppStorage.SetAndProp('PropB', 49); // PropA -> 47, PropB -> 49 135``` 136 137 138### Has 139 140static Has(propName: string): boolean 141 142判断propName对应的属性是否在AppStorage中存在。 143 144**参数:** 145 146| 参数名 | 类型 | 必填 | 参数描述 | 147| -------- | ------ | ---- | ---------------- | 148| propName | string | 是 | AppStorage中的属性名。 | 149 150**返回值:** 151 152| 类型 | 描述 | 153| ------- | ---------------------------------------- | 154| boolean | 如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。 | 155 156 157```ts 158AppStorage.Has('simpleProp'); 159``` 160 161 162### Get 163 164static Get<T>(propName: string): T | undefined 165 166获取propName在AppStorage中对应的属性。如果不存在返回undefined。 167 168**参数:** 169 170| 参数名 | 类型 | 必填 | 参数描述 | 171| -------- | ------ | ---- | ---------------- | 172| propName | string | 是 | AppStorage中的属性名。 | 173 174**返回值:** 175 176| 类型 | 描述 | 177| ------------------------ | ---------------------------------------- | 178| T \| undefined | AppStorage中propName对应的属性,如果不存在返回undefined。 | 179 180 181```ts 182AppStorage.SetOrCreate('PropA', 47); 183let value: number = AppStorage.Get('PropA'); // 47 184``` 185 186 187### Set 188 189static Set<T>(propName: string, newValue: T): boolean 190 191在AppStorage中设置propName对应属性的值。 192 193**参数:** 194 195| 参数名 | 类型 | 必填 | 参数描述 | 196| -------- | ------ | ---- | ---------------------- | 197| propName | string | 是 | AppStorage中的属性名。 | 198| newValue | T | 是 | 属性值,不能为undefined或null。 | 199 200**返回值:** 201 202| 类型 | 描述 | 203| ------- | ---------------------------------------- | 204| boolean | 如果AppStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功则返回true。 | 205 206 207```ts 208AppStorage.SetOrCreate('PropA', 48); 209let res: boolean = AppStorage.Set('PropA', 47) // true 210let res1: boolean = AppStorage.Set('PropB', 47) // false 211``` 212 213 214### SetOrCreate 215 216static SetOrCreate<T>(propName: string, newValue: T): void 217 218propName如果已经在AppStorage中存在,则设置propName对应是属性的值为newValue。如果不存在,则创建propName属性,值为newValue。 219 220**参数:** 221 222| 参数名 | 类型 | 必填 | 参数描述 | 223| -------- | ------ | ---- | ---------------------- | 224| propName | string | 是 | AppStorage中的属性名。 | 225| newValue | T | 是 | 属性值,不能为undefined或null。 | 226 227 228```ts 229AppStorage.SetOrCreate('simpleProp', 121); 230``` 231 232 233### Delete 234 235static Delete(propName: string): boolean 236 237在AppStorage中删除propName对应的属性。 238 239在AppStorage中删除该属性的前提是必须保证该属性没有订阅者。如果有订阅者,则返回false。删除成功返回true。 240 241属性的订阅者为Link、Prop等接口绑定的propName,以及\@StorageLink('propName')和\@StorageProp('propName')。这就意味着如果自定义组件中使用\@StorageLink('propName')和\@StorageProp('propName')或者SubscribedAbstractProperty实例依旧对propName有同步关系,则该属性不能从AppStorage中删除。 242 243**参数:** 244 245| 参数名 | 类型 | 必填 | 参数描述 | 246| -------- | ------ | ---- | ---------------- | 247| propName | string | 是 | AppStorage中的属性名。 | 248 249**返回值:** 250 251| 类型 | 描述 | 252| ------- | ---------------------------------------- | 253| boolean | 如果AppStorage中有对应的属性,且该属性已经没有订阅者,则删除成功,返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。 | 254 255 256```ts 257AppStorage.SetOrCreate('PropA', 47); 258AppStorage.Link('PropA'); 259let res: boolean = AppStorage.Delete('PropA'); // false, PropA still has a subscriber 260 261AppStorage.SetOrCreate('PropB', 48); 262let res1: boolean = AppStorage.Delete('PropB'); // true, PropB is deleted from AppStorage successfully 263``` 264 265 266### Keys 267 268static Keys(): IterableIterator<string> 269 270返回AppStorage中所有的属性名。 271 272**返回值:** 273 274| 类型 | 描述 | 275| ------------------------------ | ------------------ | 276| IterableIterator<string> | AppStorage中所有的属性名。 | 277 278 279```ts 280AppStorage.SetOrCreate('PropB', 48); 281let keys: IterableIterator<string> = AppStorage.Keys(); 282``` 283 284 285### staticClear 286 287static staticClear(): boolean 288 289删除所有的属性。 290 291从API version 9开始废弃,推荐使用[Clear9+](#clear9)。 292 293**返回值:** 294 295| 类型 | 描述 | 296| ------- | --------------------------------- | 297| boolean | 删除所有的属性,如果当前有状态变量依旧引用此属性,返回false。 | 298 299 300```ts 301let simple = AppStorage.staticClear(); 302``` 303 304 305### Clear<sup>9+</sup> 306 307static Clear(): boolean 308 309清除AppStorage的所有的属性。在AppStorage中清除所有属性的前提是,已经没有任何订阅者。如果有,则什么都不做返回false;删除成功返回true。 310 311订阅者的含义和参考[Delete](#delete)。 312 313**返回值:** 314 315| 类型 | 描述 | 316| ------- | ---------------------------------------- | 317| boolean | 如果AppStorage中的属性已经没有订阅者,则清除成功,返回true。否则返回false。 | 318 319 320```typescript 321AppStorage.SetOrCreate('PropA', 47); 322let res: boolean = AppStorage.Clear(); // true, there are no subscribers 323``` 324 325 326### IsMutable 327 328static IsMutable(propName: string): boolean 329 330返回AppStorage中propName对应的属性是否是可变的。 331 332**参数:** 333 334| 参数名 | 类型 | 必填 | 参数描述 | 335| -------- | ------ | ---- | ---------------- | 336| propName | string | 是 | AppStorage中的属性名。 | 337 338**返回值:** 339 340| 类型 | 描述 | 341| ------- | -------------------------------- | 342| boolean | 返回AppStorage中propNam对应的属性是否是可变的。 | 343 344 345```ts 346AppStorage.SetOrCreate('PropA', 47); 347let res: boolean = AppStorage.IsMutable('simpleProp'); 348``` 349 350 351### Size 352 353static Size(): number 354 355返回AppStorage中的属性数量。 356 357**返回值:** 358 359| 类型 | 描述 | 360| ------ | ------------------- | 361| number | 返回AppStorage中属性的数量。 | 362 363 364```ts 365AppStorage.SetOrCreate('PropB', 48); 366let res: number = AppStorage.Size(); // 1 367``` 368 369 370## LocalStorage<sup>9+</sup> 371 372 373### constructor<sup>9+</sup> 374 375constructor(initializingProperties?: Object) 376 377创建一个新的LocalStorage实例。使用Object.keys(initializingProperties)返回的属性和其数值,初始化LocalStorage实例。 378 379从API version 9开始,该接口支持在ArkTS卡片中使用。 380 381**参数:** 382 383| 参数名 | 类型 | 必填 | 参数描述 | 384| ---------------------- | ------ | ---- | ---------------------------------------- | 385| initializingProperties | Object | 否 | 用initializingProperties包含的属性和数值初始化LocalStorage。initializingProperties不能为undefined。 | 386 387 388```ts 389let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 390``` 391 392 393### GetShared<sup>9+</sup> 394 395static GetShared(): LocalStorage 396 397获取当前stage共享的LocalStorage实例。 398 399从API version 9开始,该接口支持在ArkTS卡片中使用。 400 401**模型约束:**此接口仅可在Stage模型下使用。 402 403**返回值:** 404 405| 类型 | 描述 | 406| ------------------------------ | ----------------- | 407| [LocalStorage](#localstorage9) | 返回LocalStorage实例。 | 408 409 410```ts 411let storage: LocalStorage = LocalStorage.GetShared(); 412``` 413 414 415### has<sup>9+</sup> 416 417has(propName: string): boolean 418 419判断propName对应的属性是否在LocalStorage中存在。 420 421从API version 9开始,该接口支持在ArkTS卡片中使用。 422 423**参数:** 424 425| 参数名 | 类型 | 必填 | 参数描述 | 426| -------- | ------ | ---- | ------------------ | 427| propName | string | 是 | LocalStorage中的属性名。 | 428 429**返回值:** 430 431| 类型 | 描述 | 432| ------- | ---------------------------------------- | 433| boolean | 如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。 | 434 435 436``` 437let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 438storage.has('PropA'); // true 439``` 440 441 442### get<sup>9+</sup> 443 444get<T>(propName: string): T | undefined 445 446获取propName在LocalStorage中对应的属性。 447 448从API version 9开始,该接口支持在ArkTS卡片中使用。 449 450**参数:** 451 452| 参数名 | 类型 | 必填 | 参数描述 | 453| -------- | ------ | ---- | ------------------ | 454| propName | string | 是 | LocalStorage中的属性名。 | 455 456**返回值:** 457 458| 类型 | 描述 | 459| ------------------------ | ---------------------------------------- | 460| T \| undefined | LocalStorage中propName对应的属性,如果不存在返回undefined。 | 461 462 463```ts 464let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 465let value: number = storage.get('PropA'); // 47 466``` 467 468 469### set<sup>9+</sup> 470 471set<T>(propName: string, newValue: T): boolean 472 473在LocalStorage中设置propName对应属性的值。 474 475从API version 9开始,该接口支持在ArkTS卡片中使用。 476 477**参数:** 478 479| 参数名 | 类型 | 必填 | 参数描述 | 480| -------- | ------ | ---- | ----------------------- | 481| propName | string | 是 | LocalStorage中的属性名。 | 482| newValue | T | 是 | 属性值,不能为undefined或者null。 | 483 484**返回值:** 485 486| 类型 | 描述 | 487| ------- | ---------------------------------------- | 488| boolean | 如果LocalStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功返回true。 | 489 490 491```ts 492let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 493let res: boolean = storage.set('PropA', 47); // true 494let res1: boolean = storage.set('PropB', 47); // false 495``` 496 497 498### setOrCreate<sup>9+</sup> 499 500setOrCreate<T>(propName: string, newValue: T): boolean 501 502propName如果已经在LocalStorage中存在,则设置propName对应是属性的值为newValue。如果不存在,则创建propName属性,初始化为newValue。 503 504从API version 9开始,该接口支持在ArkTS卡片中使用。 505 506**参数:** 507 508| 参数名 | 类型 | 必填 | 参数描述 | 509| -------- | ------ | ---- | ----------------------- | 510| propName | string | 是 | LocalStorage中的属性名。 | 511| newValue | T | 是 | 属性值,不能为undefined或者null。 | 512 513**返回值:** 514 515| 类型 | 描述 | 516| ------- | ---------------------------------------- | 517| boolean | 如果设置的newValue是undefined或者null,返回false。<br/>如果LocalStorage存在propName,则更新其值为newValue,返回true。<br/>如果LocalStorage不存在propName,则创建propName,并初始化其值为newValue,返回true。 | 518 519 520```ts 521let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 522let res: boolean =storage.setOrCreate('PropA', 121); // true 523let res1: boolean =storage.setOrCreate('PropB', 111); // true 524let res2: boolean =storage.setOrCreate('PropB', undefined); // false 525``` 526 527 528### link<sup>9+</sup> 529 530link<T>(propName: string): SubscribedAbstractProperty<T> 531 532如果给定的propName在LocalStorage实例中存在,则返回与LocalStorage中propName对应属性的双向绑定数据。 533 534双向绑定数据的修改会被同步回LocalStorage中,LocalStorage会将变化同步到所有绑定该propName的数据和Component中。 535 536如果LocalStorage中不存在propName,则返回undefined。 537 538从API version 9开始,该接口支持在ArkTS卡片中使用。 539 540**参数:** 541 542| 参数名 | 类型 | 必填 | 参数描述 | 543| -------- | ------ | ---- | ------------------ | 544| propName | string | 是 | LocalStorage中的属性名。 | 545 546**返回值:** 547 548| 类型 | 描述 | 549| ----------------------------------- | ---------------------------------------- | 550| SubscribedAbstractProperty<T> | SubscribedAbstractProperty<T>的实例,如果AppStorage不存在对应的propName,再返回undefined。 | 551 552 553```ts 554let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 555let linkToPropA1: SubscribedAbstractProperty<number> = storage.link('PropA'); 556let linkToPropA2: SubscribedAbstractProperty<number> = storage.link('PropA'); // linkToPropA2.get() == 47 557linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48 558``` 559 560 561### setAndLink<sup>9+</sup> 562 563setAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> 564 565与Link接口类似,如果给定的propName在LocalStorage存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在LocalStorage创建和初始化propName,返回其双向绑定数据。 566 567从API version 9开始,该接口支持在ArkTS卡片中使用。 568 569**参数:** 570 571| 参数名 | 类型 | 必填 | 参数描述 | 572| ------------ | ------ | ---- | ---------------------------------------- | 573| propName | string | 是 | LocalStorage中的属性名。 | 574| defaultValue | T | 是 | 当propName在LocalStorage中不存在,使用default在LocalStorage中初始化对应的propName。 | 575 576**返回值:** 577 578| 类型 | 描述 | 579| ----------------------------------- | ---------------------------------------- | 580| SubscribedAbstractProperty<T> | SubscribedAbstractProperty<T>的实例,如果AppStorage不存在对应的propName,再返回undefined。 | 581 582 583```ts 584let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 585let link1: SubscribedAbstractProperty<number> = storage.setAndLink('PropB', 49); // Create PropB 49 586var link2: SubscribedAbstractProperty<number> = storage.setAndLink('PropA', 50); // PropA exists, remains 47 587``` 588 589 590### prop<sup>9+</sup> 591 592prop<S>(propName: string): SubscribedAbstractProperty<S> 593 594如果给定的propName在LocalStorage存在,则返回与LocalStorage中propName对应属性的单向绑定数据。如果LocalStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回LocalStorage中。 595 596从API version 9开始,该接口支持在ArkTS卡片中使用。 597 598**参数:** 599 600| 参数名 | 类型 | 必填 | 参数描述 | 601| -------- | ------ | ---- | ------------------ | 602| propName | string | 是 | LocalStorage中的属性名。 | 603 604**返回值:** 605 606| 类型 | 描述 | 607| ----------------------------------- | ---------------------------------------- | 608| SubscribedAbstractProperty<S> | SubscribedAbstractProperty<S>的实例,如果AppStorage不存在对应的propName,在返回undefined。 | 609 610 611```ts 612let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 613let prop1: SubscribedAbstractProperty<number> = storage.prop('PropA'); 614let prop2: SubscribedAbstractProperty<number> = storage.prop('PropA'); 615prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47 616``` 617 618 619### setAndProp<sup>9+</sup> 620 621setAndProp<S>(propName: string, defaultValue: S): SubscribedAbstractProperty<S> 622 623propName在LocalStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在LocalStorage创建和初始化propName对应的属性,返回其单向绑定数据。 624 625从API version 9开始,该接口支持在ArkTS卡片中使用。 626 627**参数:** 628 629| 参数名 | 类型 | 必填 | 参数描述 | 630| ------------ | ------ | ---- | ---------------------------------------- | 631| propName | string | 是 | LocalStorage中的属性名。 | 632| defaultValue | S | 是 | 当propName在AppStorage中不存在,使用default在AppStorage中初始化对应的propName。 | 633 634**返回值:** 635 636| 类型 | 描述 | 637| ----------------------------------- | ---------------------------------------- | 638| SubscribedAbstractProperty<S> | SubscribedAbstractProperty<S>的实例,和AppStorage中propName对应属性的单向绑定的数据。 | 639 640 641```ts 642let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 643let prop: SubscribedAbstractProperty<number> = storage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49 644``` 645 646 647### delete<sup>9+</sup> 648 649delete(propName: string): boolean 650 651在LocalStorage中删除propName对应的属性。删除属性的前提是该属性已经没有订阅者,如果有则返回false。删除成功则返回true。 652 653属性的订阅者是link,prop接口绑定的propName,以及\@LocalStorageLink('propName')和\@LocalStorageProp('propName')。如果自定义组件Component中使用或者SubscribedAbstractProperty(link和prop接口的返回类型)依旧有同步关系,则该属性不能从LocalStorage中删除。 654 655从API version 9开始,该接口支持在ArkTS卡片中使用。 656 657**参数:** 658 659| 参数名 | 类型 | 必填 | 参数描述 | 660| -------- | ------ | ---- | ------------------ | 661| propName | string | 是 | LocalStorage中的属性名。 | 662 663**返回值:** 664 665| 类型 | 描述 | 666| ------- | ---------------------------------------- | 667| boolean | 如果LocalStorage中有对应的属性,且该属性已经没有订阅者,则删除成功返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。 | 668 669 670```ts 671let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 672storage.link('PropA'); 673let res: boolean = storage.delete('PropA'); // false, PropA still has a subscriber 674let res1: boolean = storage.delete('PropB'); // false, PropB is not in storage 675storage.setOrCreate('PropB', 48); 676let res2: boolean = storage.delete('PropB'); // true, PropB is deleted from storage successfully 677``` 678 679 680### keys<sup>9+</sup> 681 682keys(): IterableIterator<string> 683 684返回AppStorage中所有的属性名。 685 686从API version 9开始,该接口支持在ArkTS卡片中使用。 687 688**返回值:** 689 690| 类型 | 描述 | 691| ------------------------------ | -------------------- | 692| IterableIterator<string> | LocalStorage中所有的属性名。 | 693 694 695```ts 696let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 697let keys: IterableIterator<string> = storage.keys(); 698``` 699 700 701### size<sup>9+</sup> 702 703size(): number 704 705返回LocalStorage中的属性数量。 706 707从API version 9开始,该接口支持在ArkTS卡片中使用。 708 709**返回值:** 710 711| 类型 | 描述 | 712| ------ | --------- | 713| number | 返回键值对的数量。 | 714 715 716```ts 717let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 718let res: number = storage.size(); // 1 719``` 720 721 722### clear<sup>9+</sup> 723 724clear(): boolean 725 726 727清除LocalStorage的所有的属性。在LocalStorage中清除所有属性的前提是已经没有任何订阅者。如果有则返回false;清除成功返回true。 728 729从API version 9开始,该接口支持在ArkTS卡片中使用。 730 731**返回值:** 732 733 734| 类型 | 描述 | 735| ------- | ---------------------------------------- | 736| boolean | 如果LocalStorage中的属性已经没有任何订阅者,则清除成功,返回true。否则返回false。 | 737 738 739 740```ts 741let storage: LocalStorage = new LocalStorage({ 'PropA': 47 }); 742let res: boolean = storage.clear(); // true, there are no subscribers 743``` 744 745 746## SubscribedAbstractProperty 747 748 749### get<sup>9+</sup> 750 751abstract get(): T 752 753读取从AppStorage/LocalStorage同步属性的数据。 754 755从API version 9开始,该接口支持在ArkTS卡片中使用。 756 757**返回值:** 758 759| 类型 | 描述 | 760| ---- | ------------------------------- | 761| T | AppStorage/LocalStorage同步属性的数据。 | 762 763 764```ts 765AppStorage.SetOrCreate('PropA', 47); 766let prop1 = AppStorage.Prop('PropA'); 767prop1.get(); // prop1.get()=47 768``` 769 770 771### set<sup>9+</sup> 772 773abstract set(newValue: T): void 774 775设置AppStorage/LocalStorage同步属性的数据。 776 777从API version 9开始,该接口支持在ArkTS卡片中使用。 778 779 780**参数:** 781 782 783| 参数名 | 类型 | 必填 | 参数描述 | 784| -------- | ---- | ---- | ------- | 785| newValue | T | 是 | 要设置的数据。 | 786 787 788 789``` 790AppStorage.SetOrCreate('PropA', 47); 791let prop1 = AppStorage.Prop('PropA'); 792prop1.set(1); // prop1.get()=1 793``` 794 795 796## PersistentStorage 797 798 799### PersistProp 800 801static PersistProp<T>(key: string, defaultValue: T): void 802 803将AppStorage中key对应的属性持久化到文件中。该接口的调用通常在访问AppStorage之前。 804 805确定属性的类型和值的顺序如下: 806 8071. 如果PersistentStorage文件中存在key对应的属性,在AppStorage中创建对应的propName,并用在PersistentStorage中找到的key的属性初始化。 808 8092. 如果PersistentStorage文件中没有查询到key对应的属性,则在AppStorage中查找key对应的属性。如果找到key对应的属性,则将该属性持久化。 810 8113. 如果AppStorage也没查找到key对应的属性,则在AppStorage中创建key对应的属性。用defaultValue初始化其值,并将该属性持久化。 812 813根据上述的初始化流程,如果AppStorage中有该属性,则会使用其值,覆盖掉PersistentStorage文件中的值。由于AppStorage是内存内数据,该行为会导致数据丧失持久化能力。 814 815**参数:** 816 817| 参数名 | 类型 | 必填 | 参数描述 | 818| ------------ | ------ | ---- | ---------------------------------------- | 819| key | string | 是 | 属性名。 | 820| defaultValue | T | 是 | 在PersistentStorage和AppStorage未查询到时,则使用默认值初始化初始化它。不允许为undefined和null。 | 821 822 823**示例:** 824 825 826 827```ts 828PersistentStorage.PersistProp('highScore', '0'); 829``` 830 831 832### DeleteProp 833 834static DeleteProp(key: string): void 835 836PersistProp的逆向操作。将key对应的属性从PersistentStorage删除,后续AppStorage的操作,对PersistentStorage不会再有影响。 837 838**参数:** 839 840| 参数名 | 类型 | 必填 | 参数描述 | 841| ---- | ------ | ---- | ----------------------- | 842| key | string | 是 | PersistentStorage中的属性名。 | 843 844 845```ts 846PersistentStorage.DeleteProp('highScore'); 847``` 848 849 850### PersistProps 851 852static PersistProps(properties: {key: string, defaultValue: any;}[]): void 853 854行为和PersistProp类似,不同在于可以一次性持久化多个数据,适合在应用启动的时候初始化。 855 856**参数:** 857 858| 参数名 | 类型 | 必填 | 参数描述 | 859| ---------- | ---------------------------------------- | ---- | ---------------------------------------- | 860| properties | {key: string, defaultValue: any}[] | 是 | 持久化数组,启动key为属性名,defaultValue为默认值。规则同PersistProp。 | 861 862 863```ts 864PersistentStorage.PersistProps([{ key: 'highScore', defaultValue: '0' }, { key: 'wightScore', defaultValue: '1' }]); 865``` 866 867 868### Keys 869 870static Keys(): Array<string> 871 872返回所有持久化属性的key的数组。 873 874**返回值:** 875 876| 类型 | 描述 | 877| ------------------- | ----------------- | 878| Array<string> | 返回所有持久化属性的key的数组。 | 879 880 881```ts 882let keys: Array<string> = PersistentStorage.Keys(); 883``` 884 885 886## Environment 887 888 889### EnvProp 890 891static EnvProp<S>(key: string, value: S): boolean 892 893将Environment的内置环境变量key存入AppStorage中。如果系统中未查询到Environment环境变量key的值,则使用默认值value,存入成功,返回true。如果AppStorage已经有对应的key,则返回false。 894 895所以建议在程序启动的时候调用该接口。 896 897在没有调用EnvProp,就使用AppStorage读取环境变量是错误的。 898 899**参数:** 900 901| 参数名 | 类型 | 必填 | 参数描述 | 902| ----- | ------ | ---- | --------------------------------------- | 903| key | string | 是 | 环境变量名称,支持的范围详见[内置环境变量说明](#内置环境变量说明)。 | 904| value | S | 是 | 查询不到环境变量key,则使用value作为默认值存入AppStorage中。 | 905 906**返回值:** 907 908| 类型 | 描述 | 909| ------- | ---------------------------------------- | 910| boolean | 如果key对应的属性在AppStorage中存在,则返回false。不存在则在AppStorage中创建key对应的属性,返回true。 | 911 912**示例:** 913 914 915```ts 916Environment.EnvProp('accessibilityEnabled', 'default'); 917``` 918 919 920### 内置环境变量说明 921 922| key | 类型 | 说明 | 923| -------------------- | --------------- | ---------------------------------------- | 924| accessibilityEnabled | string | 无障碍屏幕朗读是否启用。 | 925| colorMode | ColorMode | 深浅色模式,可选值为:<br/>- ColorMode.LIGHT:浅色模式;<br/>- ColorMode.DARK:深色模式。 | 926| fontScale | number | 字体大小比例。 | 927| fontWeightScale | number | 字重比例。 | 928| layoutDirection | LayoutDirection | 布局方向类型,可选值为:<br/>- LayoutDirection.LTR:从左到右;<br/>- LayoutDirection.RTL:从右到左。 | 929| languageCode | string | 当前系统语言,小写字母,例如zh。 | 930 931 932### EnvProps 933 934static EnvProps(props: {key: string; defaultValue: any;}[]): void 935 936和EnvProp类似,不同点在于参数为数组,可以一次性初始化多个数据。建议在应用启动时调用,将系统环境变量批量存入AppStorage中。 937 938**参数:** 939 940| 参数名 | 类型 | 必填 | 参数描述 | 941| ----- | ---------------------------------------- | ---- | ------------------ | 942| props | {key: string, defaultValue: any}[] | 是 | 系统环境变量和默认值的键值对的数组。 | 943 944 945```ts 946Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { 947 key: 'languageCode', 948 defaultValue: 'en' 949}, { key: 'prop', defaultValue: 'hhhh' }]); 950``` 951 952 953### Keys 954 955static Keys(): Array<string> 956 957返回环境变量的属性key的数组。 958 959**返回值:** 960 961| 类型 | 描述 | 962| ------------------- | ----------- | 963| Array<string> | 返回关联的系统项数组。 | 964 965 966```ts 967Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { 968 key: 'languageCode', 969 defaultValue: 'en' 970}, { key: 'prop', defaultValue: 'hhhh' }]); 971 972let keys: Array<string> = Environment.Keys(); // accessibilityEnabled, languageCode, prop 973```