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 24AppStorage具体UI使用说明,详见[AppStorage(应用全局的UI状态存储)](../../quick-start/arkts-appstorage.md) 25 26 27### link<sup>10+</sup> 28 29static link<T>(propName: string): SubscribedAbstractProperty<T> 30 31与AppStorage中对应的propName建立双向数据绑定。如果给定的propName在AppStorage中存在,返回与AppStorage中propName对应属性的双向绑定数据。 32 33双向绑定数据的修改会同步回AppStorage中,AppStorage会将变化同步到所有绑定该propName的数据和自定义组件中。 34 35如果AppStorage中不存在propName,则返回undefined。 36 37 38**参数:** 39 40| 参数名 | 类型 | 必填 | 参数描述 | 41| -------- | ------ | ---- | ---------------- | 42| propName | string | 是 | AppStorage中的属性名。 | 43 44**返回值:** 45 46| 类型 | 描述 | 47| ----------------------------------- | ---------------------------------------- | 48| SubscribedAbstractProperty<T> | 返回双向绑定的数据,如果AppStorage不存在对应的propName,则返回undefined。 | 49 50 51```ts 52AppStorage.setOrCreate('PropA', 47); 53let linkToPropA1:SubscribedAbstractProperty<number> = AppStorage.link('PropA'); 54let linkToPropA2:SubscribedAbstractProperty<number> = AppStorage.link('PropA'); // linkToPropA2.get() == 47 55linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48 56``` 57 58 59### setAndLink<sup>10+</sup> 60 61static setAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> 62 63与Link接口类似,如果给定的propName在AppStorage中存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName,返回其双向绑定数据。 64 65**参数:** 66 67| 参数名 | 类型 | 必填 | 参数描述 | 68| ------------ | ------ | ---- | ---------------------------------------- | 69| propName | string | 是 | AppStorage中的属性名。 | 70| defaultValue | T | 是 | 当propName在AppStorage中不存在,使用defaultValue在AppStorage中初始化对应的propName。 | 71 72**返回值:** 73 74| 类型 | 描述 | 75| ----------------------------------- | ---------------------------------------- | 76| SubscribedAbstractProperty<T> | SubscribedAbstractProperty<T>的实例,和AppStorage中propName对应属性的双向绑定的数据。 | 77 78 79```ts 80AppStorage.setOrCreate('PropA', 47); 81let link1: SubscribedAbstractProperty<number> = AppStorage.setAndLink('PropB', 49); // Create PropB 49 82let link2: SubscribedAbstractProperty<number> = AppStorage.setAndLink('PropA', 50); // PropA exists, remains 47 83``` 84 85 86### prop<sup>10+</sup> 87 88static prop<T>(propName: string): SubscribedAbstractProperty<T> 89 90与AppStorage中对应的propName建立单向属性绑定。如果给定的propName在AppStorage中存在,则返回与AppStorage中propName对应属性的单向绑定数据。如果AppStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回AppStorage中。 91 92>**说明:** 93> Prop仅支持简单类型。 94 95**参数:** 96 97| 参数名 | 类型 | 必填 | 参数描述 | 98| -------- | ------ | ---- | ---------------- | 99| propName | string | 是 | AppStorage中的属性名。 | 100 101**返回值:** 102 103| 类型 | 描述 | 104| ----------------------------------- | ---------------------------------------- | 105| SubscribedAbstractProperty<T> | 返回单向绑定的数据,如果AppStorage不存在对应的propName,则返回undefined。 | 106 107 108```ts 109AppStorage.setOrCreate('PropA', 47); 110let prop1: SubscribedAbstractProperty<number> = AppStorage.prop('PropA'); 111let prop2: SubscribedAbstractProperty<number> = AppStorage.prop('PropA'); 112prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47 113``` 114 115 116### setAndProp<sup>10+</sup> 117 118static setAndProp<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> 119 120与Prop接口类似。如果给定的propName在AppStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName对应的属性,返回其单向绑定数据。 121 122 123**参数:** 124 125| 参数名 | 类型 | 必填 | 参数描述 | 126| ------------ | ------ | ---- | ---------------------------------------- | 127| propName | string | 是 | AppStorage中的属性名。 | 128| defaultValue | T | 是 | 当propName在AppStorage中不存在时,使用default在AppStorage中初始化对应的propName。 | 129 130**返回值:** 131 132| 类型 | 描述 | 133| ----------------------------------- | --------------------------------------- | 134| SubscribedAbstractProperty<T> | SubscribedAbstractProperty<T>的实例。 | 135 136 137```ts 138AppStorage.setOrCreate('PropA', 47); 139let prop: SubscribedAbstractProperty<number> = AppStorage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49 140``` 141 142 143### has<sup>10+</sup> 144 145static has(propName: string): boolean 146 147判断propName对应的属性是否在AppStorage中存在。 148 149**参数:** 150 151| 参数名 | 类型 | 必填 | 参数描述 | 152| -------- | ------ | ---- | ---------------- | 153| propName | string | 是 | AppStorage中的属性名。 | 154 155**返回值:** 156 157| 类型 | 描述 | 158| ------- | ---------------------------------------- | 159| boolean | 如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。 | 160 161 162```ts 163AppStorage.has('simpleProp'); 164``` 165 166 167### get<sup>10+</sup> 168 169static get<T>(propName: string): T | undefined 170 171获取propName在AppStorage中对应的属性。如果不存在返回undefined。 172 173**参数:** 174 175| 参数名 | 类型 | 必填 | 参数描述 | 176| -------- | ------ | ---- | ---------------- | 177| propName | string | 是 | AppStorage中的属性名。 | 178 179**返回值:** 180 181| 类型 | 描述 | 182| ------------------------ | ---------------------------------------- | 183| T \| undefined | AppStorage中propName对应的属性,如果不存在返回undefined。 | 184 185 186```ts 187AppStorage.setOrCreate('PropA', 47); 188let value: number = AppStorage.get('PropA') as number; // 47 189``` 190 191 192### set<sup>10+</sup> 193 194static set<T>(propName: string, newValue: T): boolean 195 196在AppStorage中设置propName对应属性的值。如果newValue的值和propName对应属性的值相同,即不需要做赋值操作,状态变量不会通知UI刷新propName对应属性的值。 197 198**参数:** 199 200| 参数名 | 类型 | 必填 | 参数描述 | 201| -------- | ------ | ---- | ---------------------- | 202| propName | string | 是 | AppStorage中的属性名。 | 203| newValue | T | 是 | 属性值,不能为undefined或null。 | 204 205**返回值:** 206 207| 类型 | 描述 | 208| ------- | ---------------------------------------- | 209| boolean | 如果AppStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功则返回true。 | 210 211 212```ts 213AppStorage.setOrCreate('PropA', 48); 214let res: boolean = AppStorage.set('PropA', 47) // true 215let res1: boolean = AppStorage.set('PropB', 47) // false 216``` 217 218 219### setOrCreate<sup>10+</sup> 220 221static setOrCreate<T>(propName: string, newValue: T): void 222 223如果propName已经在AppStorage中存在,并且newValue和propName对应属性的值不同,则设置propName对应属性的值为newValue,否则状态变量不会通知UI刷新propName对应属性的值。 224如果propName不存在,则创建propName属性,值为newValue。 225 226**参数:** 227 228| 参数名 | 类型 | 必填 | 参数描述 | 229| -------- | ------ | ---- | ---------------------- | 230| propName | string | 是 | AppStorage中的属性名。 | 231| newValue | T | 是 | 属性值,不能为undefined或null。 | 232 233 234```ts 235AppStorage.setOrCreate('simpleProp', 121); 236``` 237 238 239### delete<sup>10+</sup> 240 241static delete(propName: string): boolean 242 243在AppStorage中删除propName对应的属性。 244 245在AppStorage中删除该属性的前提是必须保证该属性没有订阅者。如果有订阅者,则返回false。删除成功返回true。 246 247属性的订阅者为Link、Prop等接口绑定的propName,以及\@StorageLink('propName')和\@StorageProp('propName')。这就意味着如果自定义组件中使用\@StorageLink('propName')和\@StorageProp('propName')或者SubscribedAbstractProperty实例依旧对propName有同步关系,则该属性不能从AppStorage中删除。 248 249**参数:** 250 251| 参数名 | 类型 | 必填 | 参数描述 | 252| -------- | ------ | ---- | ---------------- | 253| propName | string | 是 | AppStorage中的属性名。 | 254 255**返回值:** 256 257| 类型 | 描述 | 258| ------- | ---------------------------------------- | 259| boolean | 如果AppStorage中有对应的属性,且该属性已经没有订阅者,则删除成功,返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。 | 260 261 262```ts 263AppStorage.setOrCreate('PropA', 47); 264AppStorage.link<number>('PropA'); 265let res: boolean = AppStorage.delete('PropA'); // false, PropA still has a subscriber 266 267AppStorage.setOrCreate('PropB', 48); 268let res1: boolean = AppStorage.delete('PropB'); // true, PropB is deleted from AppStorage successfully 269``` 270 271 272### keys<sup>10+</sup> 273 274static keys(): IterableIterator<string> 275 276返回AppStorage中所有的属性名。 277 278**返回值:** 279 280| 类型 | 描述 | 281| ------------------------------ | ------------------ | 282| IterableIterator<string> | AppStorage中所有的属性名。 | 283 284 285```ts 286AppStorage.setOrCreate('PropB', 48); 287let keys: IterableIterator<string> = AppStorage.keys(); 288``` 289 290 291### clear<sup>10+</sup> 292 293static clear(): boolean 294 295清除AppStorage的所有的属性。在AppStorage中清除所有属性的前提是,已经没有任何订阅者。如果有,则什么都不做返回false;删除成功返回true。 296 297订阅者的含义和参考[Delete](#delete)。 298 299**返回值:** 300 301| 类型 | 描述 | 302| ------- | ---------------------------------------- | 303| boolean | 如果AppStorage中的属性已经没有订阅者,则清除成功,返回true。否则返回false。 | 304 305 306```ts 307AppStorage.setOrCreate('PropA', 47); 308let res: boolean = AppStorage.clear(); // true, there are no subscribers 309``` 310 311 312### size<sup>10+</sup> 313 314static size(): number 315 316返回AppStorage中的属性数量。 317 318**返回值:** 319 320| 类型 | 描述 | 321| ------ | ------------------- | 322| number | 返回AppStorage中属性的数量。 | 323 324 325```ts 326AppStorage.setOrCreate('PropB', 48); 327let res: number = AppStorage.size(); // 1 328``` 329 330 331### Link<sup>(deprecated)</sup> 332 333static Link(propName: string): any 334 335与AppStorage中对应的propName建立双向数据绑定。如果给定的propName在AppStorage中存在,返回与AppStorage中propName对应属性的双向绑定数据。 336 337双向绑定数据的修改会同步回AppStorage中,AppStorage会将变化同步到所有绑定该propName的数据和自定义组件中。 338 339如果AppStorage中不存在propName,则返回undefined。 340 341从API version 10开始废弃,推荐使用[link10+](#link10)。 342 343 344**参数:** 345 346| 参数名 | 类型 | 必填 | 参数描述 | 347| -------- | ------ | ---- | ---------------- | 348| propName | string | 是 | AppStorage中的属性名。 | 349 350**返回值:** 351 352| 类型 | 描述 | 353| ---- | ---------------------------------------- | 354| any | 返回双向绑定的数据,如果AppStorage不存在对应的propName,在返回undefined。 | 355 356 357```ts 358AppStorage.SetOrCreate('PropA', 47); 359let linkToPropA1:SubscribedAbstractProperty<number> = AppStorage.Link('PropA'); 360let linkToPropA2:SubscribedAbstractProperty<number> = AppStorage.Link('PropA'); // linkToPropA2.get() == 47 361linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48 362``` 363 364 365### SetAndLink<sup>(deprecated)</sup> 366 367static SetAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> 368 369与Link接口类似,如果给定的propName在AppStorage中存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName,返回其双向绑定数据。 370 371从API version 10开始废弃,推荐使用[setAndLink10+](#setandlink10)。 372 373**参数:** 374 375| 参数名 | 类型 | 必填 | 参数描述 | 376| ------------ | ------ | ---- | ---------------------------------------- | 377| propName | string | 是 | AppStorage中的属性名。 | 378| defaultValue | T | 是 | 当propName在AppStorage中不存在,使用defaultValue在AppStorage中初始化对应的propName。 | 379 380**返回值:** 381 382| 类型 | 描述 | 383| ----------------------------------- | ---------------------------------------- | 384| SubscribedAbstractProperty<T> | SubscribedAbstractProperty<T>的实例,和AppStorage中propName对应属性的双向绑定的数据。 | 385 386 387```ts 388AppStorage.SetOrCreate('PropA', 47); 389let link1: SubscribedAbstractProperty<number> = AppStorage.SetAndLink('PropB', 49); // Create PropB 49 390let link2: SubscribedAbstractProperty<number> = AppStorage.SetAndLink('PropA', 50); // PropA exists, remains 47 391``` 392 393### Prop<sup>(deprecated)</sup> 394 395static Prop(propName: string): any 396 397与AppStorage中对应的propName建立单向属性绑定。如果给定的propName在AppStorage中存在,则返回与AppStorage中propName对应属性的单向绑定数据。如果AppStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回AppStorage中。 398 399>**说明:** 400> Prop仅支持简单类型。 401> 从API version 10开始废弃,推荐使用[prop10+](#prop10)。 402 403**参数:** 404 405| 参数名 | 类型 | 必填 | 参数描述 | 406| -------- | ------ | ---- | ---------------- | 407| propName | string | 是 | AppStorage中的属性名。 | 408 409**返回值:** 410 411| 类型 | 描述 | 412| ---- | ---------------------------------------- | 413| any | 返回单向绑定的数据,如果AppStorage不存在对应的propName,则返回undefined。 | 414 415 416```ts 417AppStorage.SetOrCreate('PropA', 47); 418let prop1:SubscribedAbstractProperty<number> = AppStorage.Prop('PropA'); 419let prop2:SubscribedAbstractProperty<number> = AppStorage.Prop('PropA'); 420prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47 421``` 422 423 424### SetAndProp<sup>(deprecated)</sup> 425 426static SetAndProp<S>(propName: string, defaultValue: S): SubscribedAbstractProperty<S> 427 428与Prop接口类似。如果给定的propName在AppStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName对应的属性,返回其单向绑定数据。 429 430从API version 10开始废弃,推荐使用[setAndProp10+](#setandprop10)。 431 432**参数:** 433 434| 参数名 | 类型 | 必填 | 参数描述 | 435| ------------ | ------ | ---- | ---------------------------------------- | 436| propName | string | 是 | AppStorage中的属性名。 | 437| defaultValue | S | 是 | 当propName在AppStorage中不存在时,使用default在AppStorage中初始化对应的propName。 | 438 439**返回值:** 440 441| 类型 | 描述 | 442| ----------------------------------- | --------------------------------------- | 443| SubscribedAbstractProperty<S> | SubscribedAbstractProperty<S>的实例。 | 444 445 446```ts 447AppStorage.SetOrCreate('PropA', 47); 448let prop: SubscribedAbstractProperty<number> = AppStorage.SetAndProp('PropB', 49); // PropA -> 47, PropB -> 49 449``` 450 451 452### Has<sup>(deprecated)</sup> 453 454static Has(propName: string): boolean 455 456判断propName对应的属性是否在AppStorage中存在。 457 458从API version 10开始废弃,推荐使用[has10+](#has10)。 459 460**参数:** 461 462| 参数名 | 类型 | 必填 | 参数描述 | 463| -------- | ------ | ---- | ---------------- | 464| propName | string | 是 | AppStorage中的属性名。 | 465 466**返回值:** 467 468| 类型 | 描述 | 469| ------- | ---------------------------------------- | 470| boolean | 如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。 | 471 472 473```ts 474AppStorage.Has('simpleProp'); 475``` 476 477 478### Get<sup>(deprecated)</sup> 479 480static Get<T>(propName: string): T | undefined 481 482获取propName在AppStorage中对应的属性。如果不存在返回undefined。 483 484从API version 10开始废弃,推荐使用[get10+](#get10)。 485 486**参数:** 487 488| 参数名 | 类型 | 必填 | 参数描述 | 489| -------- | ------ | ---- | ---------------- | 490| propName | string | 是 | AppStorage中的属性名。 | 491 492**返回值:** 493 494| 类型 | 描述 | 495| ------------------------ | ---------------------------------------- | 496| T \| undefined | AppStorage中propName对应的属性,如果不存在返回undefined。 | 497 498 499```ts 500AppStorage.SetOrCreate('PropA', 47); 501let value: number = AppStorage.Get('PropA') as number; // 47 502``` 503 504 505### Set<sup>(deprecated)</sup> 506 507static Set<T>(propName: string, newValue: T): boolean 508 509在AppStorage中设置propName对应属性的值。 510 511从API version 10开始废弃,推荐使用[set10+](#set10)。 512 513**参数:** 514 515| 参数名 | 类型 | 必填 | 参数描述 | 516| -------- | ------ | ---- | ---------------------- | 517| propName | string | 是 | AppStorage中的属性名。 | 518| newValue | T | 是 | 属性值,不能为undefined或null。 | 519 520**返回值:** 521 522| 类型 | 描述 | 523| ------- | ---------------------------------------- | 524| boolean | 如果AppStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功则返回true。 | 525 526 527```ts 528AppStorage.SetOrCreate('PropA', 48); 529let res: boolean = AppStorage.Set('PropA', 47) // true 530let res1: boolean = AppStorage.Set('PropB', 47) // false 531``` 532 533 534### SetOrCreate<sup>(deprecated)</sup> 535 536static SetOrCreate<T>(propName: string, newValue: T): void 537 538如果propName已经在AppStorage中存在,则设置propName对应是属性的值为newValue。如果不存在,则创建propName属性,值为newValue。 539 540从API version 10开始废弃,推荐使用[setOrCreate10+](#setorcreate10)。 541 542**参数:** 543 544| 参数名 | 类型 | 必填 | 参数描述 | 545| -------- | ------ | ---- | ---------------------- | 546| propName | string | 是 | AppStorage中的属性名。 | 547| newValue | T | 是 | 属性值,不能为undefined或null。 | 548 549 550```ts 551AppStorage.SetOrCreate('simpleProp', 121); 552``` 553 554 555### Delete<sup>(deprecated)</sup> 556 557static Delete(propName: string): boolean 558 559在AppStorage中删除propName对应的属性。 560 561在AppStorage中删除该属性的前提是必须保证该属性没有订阅者。如果有订阅者,则返回false。删除成功返回true。 562 563属性的订阅者为Link、Prop等接口绑定的propName,以及\@StorageLink('propName')和\@StorageProp('propName')。这就意味着如果自定义组件中使用\@StorageLink('propName')和\@StorageProp('propName')或者SubscribedAbstractProperty实例依旧对propName有同步关系,则该属性不能从AppStorage中删除。 564 565从API version 10开始废弃,推荐使用[delete10+](#delete10)。 566 567**参数:** 568 569| 参数名 | 类型 | 必填 | 参数描述 | 570| -------- | ------ | ---- | ---------------- | 571| propName | string | 是 | AppStorage中的属性名。 | 572 573**返回值:** 574 575| 类型 | 描述 | 576| ------- | ---------------------------------------- | 577| boolean | 如果AppStorage中有对应的属性,且该属性已经没有订阅者,则删除成功,返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。 | 578 579 580```ts 581AppStorage.SetOrCreate('PropA', 47); 582AppStorage.Link('PropA'); 583let res: boolean = AppStorage.Delete('PropA'); // false, PropA still has a subscriber 584 585AppStorage.SetOrCreate('PropB', 48); 586let res1: boolean = AppStorage.Delete('PropB'); // true, PropB is deleted from AppStorage successfully 587``` 588 589 590### Keys<sup>(deprecated)</sup> 591 592static Keys(): IterableIterator<string> 593 594返回AppStorage中所有的属性名。 595 596从API version 10开始废弃,推荐使用[keys10+](#keys10)。 597 598**返回值:** 599 600| 类型 | 描述 | 601| ------------------------------ | ------------------ | 602| IterableIterator<string> | AppStorage中所有的属性名。 | 603 604 605```ts 606AppStorage.SetOrCreate('PropB', 48); 607let keys: IterableIterator<string> = AppStorage.Keys(); 608``` 609 610 611### staticClear<sup>(deprecated)</sup> 612 613static staticClear(): boolean 614 615删除所有的属性。 616 617从API version 9开始废弃,推荐使用[Clear9+](#clear9)。 618 619**返回值:** 620 621| 类型 | 描述 | 622| ------- | --------------------------------- | 623| boolean | 删除所有的属性,如果当前有状态变量依旧引用此属性,返回false。 | 624 625 626```ts 627let simple = AppStorage.staticClear(); 628``` 629 630 631### Clear<sup>(deprecated)</sup> 632 633static Clear(): boolean 634 635清除AppStorage的所有的属性。在AppStorage中清除所有属性的前提是,已经没有任何订阅者。如果有,则什么都不做返回false;删除成功返回true。 636 637订阅者的含义和参考[Delete](#delete)。 638 639从API version 10开始废弃,推荐使用[clear10+](#clear10)。 640 641**返回值:** 642 643| 类型 | 描述 | 644| ------- | ---------------------------------------- | 645| boolean | 如果AppStorage中的属性已经没有订阅者,则清除成功,返回true。否则返回false。 | 646 647 648```typescript 649AppStorage.SetOrCreate('PropA', 47); 650let res: boolean = AppStorage.Clear(); // true, there are no subscribers 651``` 652 653 654### IsMutable<sup>(deprecated)</sup> 655 656static IsMutable(propName: string): boolean 657 658返回AppStorage中propName对应的属性是否是可变的。 659 660从API version 10开始废弃。 661 662**参数:** 663 664| 参数名 | 类型 | 必填 | 参数描述 | 665| -------- | ------ | ---- | ---------------- | 666| propName | string | 是 | AppStorage中的属性名。 | 667 668**返回值:** 669 670| 类型 | 描述 | 671| ------- | -------------------------------- | 672| boolean | 返回AppStorage中propNam对应的属性是否是可变的。 | 673 674 675```ts 676AppStorage.SetOrCreate('PropA', 47); 677let res: boolean = AppStorage.IsMutable('simpleProp'); 678``` 679 680 681### Size<sup>(deprecated)</sup> 682 683static Size(): number 684 685返回AppStorage中的属性数量。 686 687从API version 10开始废弃,推荐使用[size10+](#size10)。 688 689**返回值:** 690 691| 类型 | 描述 | 692| ------ | ------------------- | 693| number | 返回AppStorage中属性的数量。 | 694 695 696```ts 697AppStorage.SetOrCreate('PropB', 48); 698let res: number = AppStorage.Size(); // 1 699``` 700 701 702## LocalStorage<sup>9+</sup> 703 704 705LocalStorage具体UI使用说明,详见[LocalStorage(页面级UI状态存储)](../../quick-start/arkts-localstorage.md) 706 707 708### constructor<sup>9+</sup> 709 710constructor(initializingProperties?: Object) 711 712创建一个新的LocalStorage实例。使用Object.keys(initializingProperties)返回的属性和其数值,初始化LocalStorage实例。 713 714从API version 9开始,该接口支持在ArkTS卡片中使用。 715 716**参数:** 717 718| 参数名 | 类型 | 必填 | 参数描述 | 719| ---------------------- | ------ | ---- | ---------------------------------------- | 720| initializingProperties | Object | 否 | 用initializingProperties包含的属性和数值初始化LocalStorage。initializingProperties不能为undefined。 | 721 722 723```ts 724let para:Record<string,number> = { 'PropA': 47 }; 725let storage: LocalStorage = new LocalStorage(para); 726``` 727 728 729### getShared<sup>10+</sup> 730 731static getShared(): LocalStorage 732 733获取当前stage共享的LocalStorage实例。 734 735从API version 9开始,该接口支持在ArkTS卡片中使用。 736 737**模型约束:**此接口仅可在Stage模型下使用。 738 739**返回值:** 740 741| 类型 | 描述 | 742| ------------------------------ | ----------------- | 743| [LocalStorage](#localstorage9) | 返回LocalStorage实例。 | 744 745 746getShared具体使用,见[在UI页面通过getShared接口获取在通过loadContent共享的LocalStorage实例](../../quick-start/arkts-localstorage.md#将localstorage实例从uiability共享到一个或多个视图) 747 748 749### has<sup>9+</sup> 750 751has(propName: string): boolean 752 753判断propName对应的属性是否在LocalStorage中存在。 754 755从API version 9开始,该接口支持在ArkTS卡片中使用。 756 757**参数:** 758 759| 参数名 | 类型 | 必填 | 参数描述 | 760| -------- | ------ | ---- | ------------------ | 761| propName | string | 是 | LocalStorage中的属性名。 | 762 763**返回值:** 764 765| 类型 | 描述 | 766| ------- | ---------------------------------------- | 767| boolean | 如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。 | 768 769 770```ts 771let para:Record<string,number> = { 'PropA': 47 }; 772let storage: LocalStorage = new LocalStorage(para); 773storage.has('PropA'); // true 774``` 775 776 777### get<sup>9+</sup> 778 779get<T>(propName: string): T | undefined 780 781获取propName在LocalStorage中对应的属性。 782 783从API version 9开始,该接口支持在ArkTS卡片中使用。 784 785**参数:** 786 787| 参数名 | 类型 | 必填 | 参数描述 | 788| -------- | ------ | ---- | ------------------ | 789| propName | string | 是 | LocalStorage中的属性名。 | 790 791**返回值:** 792 793| 类型 | 描述 | 794| ------------------------ | ---------------------------------------- | 795| T \| undefined | LocalStorage中propName对应的属性,如果不存在返回undefined。 | 796 797 798```ts 799let para:Record<string,number> = { 'PropA': 47 }; 800let storage: LocalStorage = new LocalStorage(para); 801let value: number = storage.get('PropA') as number; // 47 802``` 803 804 805### set<sup>9+</sup> 806 807set<T>(propName: string, newValue: T): boolean 808 809在LocalStorage中设置propName对应属性的值。如果newValue的值和propName对应属性的值相同,即不需要做赋值操作,状态变量不会通知UI刷新propName对应属性的值。 810 811从API version 9开始,该接口支持在ArkTS卡片中使用。 812 813**参数:** 814 815| 参数名 | 类型 | 必填 | 参数描述 | 816| -------- | ------ | ---- | ----------------------- | 817| propName | string | 是 | LocalStorage中的属性名。 | 818| newValue | T | 是 | 属性值,不能为undefined或者null。 | 819 820**返回值:** 821 822| 类型 | 描述 | 823| ------- | ---------------------------------------- | 824| boolean | 如果LocalStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功返回true。 | 825 826 827```ts 828let para:Record<string,number> = { 'PropA': 47 }; 829let storage: LocalStorage = new LocalStorage(para); 830let res: boolean = storage.set('PropA', 47); // true 831let res1: boolean = storage.set('PropB', 47); // false 832``` 833 834 835### setOrCreate<sup>9+</sup> 836 837setOrCreate<T>(propName: string, newValue: T): boolean 838 839如果propName已经在LocalStorage中存在,并且newValue和propName对应属性的值不同,则设置propName对应属性的值为newValue,否则状态变量不会通知UI刷新propName对应属性的值。 840如果propName不存在,则创建propName属性,值为newValue。 841 842从API version 9开始,该接口支持在ArkTS卡片中使用。 843 844**参数:** 845 846| 参数名 | 类型 | 必填 | 参数描述 | 847| -------- | ------ | ---- | ----------------------- | 848| propName | string | 是 | LocalStorage中的属性名。 | 849| newValue | T | 是 | 属性值,不能为undefined或者null。 | 850 851**返回值:** 852 853| 类型 | 描述 | 854| ------- | ---------------------------------------- | 855| boolean | 如果设置的newValue是undefined或者null,返回false。<br/>如果LocalStorage存在propName,则更新其值为newValue,返回true。<br/>如果LocalStorage不存在propName,则创建propName,并初始化其值为newValue,返回true。 | 856 857 858```ts 859let para:Record<string,number> = { 'PropA': 47 }; 860let storage: LocalStorage = new LocalStorage(para); 861let res: boolean =storage.setOrCreate('PropA', 121); // true 862let res1: boolean =storage.setOrCreate('PropB', 111); // true 863let res2: boolean =storage.setOrCreate('PropB', null); // false 864``` 865 866 867### link<sup>9+</sup> 868 869link<T>(propName: string): SubscribedAbstractProperty<T> 870 871如果给定的propName在LocalStorage实例中存在,则返回与LocalStorage中propName对应属性的双向绑定数据。 872 873双向绑定数据的修改会被同步回LocalStorage中,LocalStorage会将变化同步到所有绑定该propName的数据和Component中。 874 875如果LocalStorage中不存在propName,则返回undefined。 876 877从API version 9开始,该接口支持在ArkTS卡片中使用。 878 879**参数:** 880 881| 参数名 | 类型 | 必填 | 参数描述 | 882| -------- | ------ | ---- | ------------------ | 883| propName | string | 是 | LocalStorage中的属性名。 | 884 885**返回值:** 886 887| 类型 | 描述 | 888| ----------------------------------- | ---------------------------------------- | 889| SubscribedAbstractProperty<T> | SubscribedAbstractProperty<T>的实例,如果AppStorage不存在对应的propName,再返回undefined。 | 890 891 892```ts 893let para:Record<string,number> = { 'PropA': 47 }; 894let storage: LocalStorage = new LocalStorage(para); 895let linkToPropA1: SubscribedAbstractProperty<number> = storage.link('PropA'); 896let linkToPropA2: SubscribedAbstractProperty<number> = storage.link('PropA'); // linkToPropA2.get() == 47 897linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48 898``` 899 900 901### setAndLink<sup>9+</sup> 902 903setAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> 904 905与Link接口类似,如果给定的propName在LocalStorage存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在LocalStorage创建和初始化propName,返回其双向绑定数据。 906 907从API version 9开始,该接口支持在ArkTS卡片中使用。 908 909**参数:** 910 911| 参数名 | 类型 | 必填 | 参数描述 | 912| ------------ | ------ | ---- | ---------------------------------------- | 913| propName | string | 是 | LocalStorage中的属性名。 | 914| defaultValue | T | 是 | 当propName在LocalStorage中不存在,使用default在LocalStorage中初始化对应的propName。 | 915 916**返回值:** 917 918| 类型 | 描述 | 919| ----------------------------------- | ---------------------------------------- | 920| SubscribedAbstractProperty<T> | SubscribedAbstractProperty<T>的实例,如果AppStorage不存在对应的propName,再返回undefined。 | 921 922 923```ts 924let para:Record<string,number> = { 'PropA': 47 }; 925let storage: LocalStorage = new LocalStorage(para); 926let link1: SubscribedAbstractProperty<number> = storage.setAndLink('PropB', 49); // Create PropB 49 927let link2: SubscribedAbstractProperty<number> = storage.setAndLink('PropA', 50); // PropA exists, remains 47 928``` 929 930 931### prop<sup>9+</sup> 932 933prop<S>(propName: string): SubscribedAbstractProperty<S> 934 935如果给定的propName在LocalStorage存在,则返回与LocalStorage中propName对应属性的单向绑定数据。如果LocalStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回LocalStorage中。 936 937从API version 9开始,该接口支持在ArkTS卡片中使用。 938 939**参数:** 940 941| 参数名 | 类型 | 必填 | 参数描述 | 942| -------- | ------ | ---- | ------------------ | 943| propName | string | 是 | LocalStorage中的属性名。 | 944 945**返回值:** 946 947| 类型 | 描述 | 948| ----------------------------------- | ---------------------------------------- | 949| SubscribedAbstractProperty<S> | SubscribedAbstractProperty<S>的实例,如果AppStorage不存在对应的propName,在返回undefined。 | 950 951 952```ts 953let para:Record<string,number> = { 'PropA': 47 }; 954let storage: LocalStorage = new LocalStorage(para); 955let prop1: SubscribedAbstractProperty<number> = storage.prop('PropA'); 956let prop2: SubscribedAbstractProperty<number> = storage.prop('PropA'); 957prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47 958``` 959 960 961### setAndProp<sup>9+</sup> 962 963setAndProp<S>(propName: string, defaultValue: S): SubscribedAbstractProperty<S> 964 965propName在LocalStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在LocalStorage创建和初始化propName对应的属性,返回其单向绑定数据。 966 967从API version 9开始,该接口支持在ArkTS卡片中使用。 968 969**参数:** 970 971| 参数名 | 类型 | 必填 | 参数描述 | 972| ------------ | ------ | ---- | ---------------------------------------- | 973| propName | string | 是 | LocalStorage中的属性名。 | 974| defaultValue | S | 是 | 当propName在AppStorage中不存在,使用default在AppStorage中初始化对应的propName。 | 975 976**返回值:** 977 978| 类型 | 描述 | 979| ----------------------------------- | ---------------------------------------- | 980| SubscribedAbstractProperty<S> | SubscribedAbstractProperty<S>的实例,和AppStorage中propName对应属性的单向绑定的数据。 | 981 982 983```ts 984let para:Record<string,number> = { 'PropA': 47 }; 985let storage: LocalStorage = new LocalStorage(para); 986let prop: SubscribedAbstractProperty<number> = storage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49 987``` 988 989 990### delete<sup>9+</sup> 991 992delete(propName: string): boolean 993 994在LocalStorage中删除propName对应的属性。删除属性的前提是该属性已经没有订阅者,如果有则返回false。删除成功则返回true。 995 996属性的订阅者是link,prop接口绑定的propName,以及\@LocalStorageLink('propName')和\@LocalStorageProp('propName')。如果自定义组件Component中使用或者SubscribedAbstractProperty(link和prop接口的返回类型)依旧有同步关系,则该属性不能从LocalStorage中删除。 997 998从API version 9开始,该接口支持在ArkTS卡片中使用。 999 1000**参数:** 1001 1002| 参数名 | 类型 | 必填 | 参数描述 | 1003| -------- | ------ | ---- | ------------------ | 1004| propName | string | 是 | LocalStorage中的属性名。 | 1005 1006**返回值:** 1007 1008| 类型 | 描述 | 1009| ------- | ---------------------------------------- | 1010| boolean | 如果LocalStorage中有对应的属性,且该属性已经没有订阅者,则删除成功返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。 | 1011 1012 1013```ts 1014let para:Record<string,number> = { 'PropA': 47 }; 1015let storage: LocalStorage = new LocalStorage(para); 1016storage.link<number>('PropA'); 1017let res: boolean = storage.delete('PropA'); // false, PropA still has a subscriber 1018let res1: boolean = storage.delete('PropB'); // false, PropB is not in storage 1019storage.setOrCreate('PropB', 48); 1020let res2: boolean = storage.delete('PropB'); // true, PropB is deleted from storage successfully 1021``` 1022 1023 1024### keys<sup>9+</sup> 1025 1026keys(): IterableIterator<string> 1027 1028返回AppStorage中所有的属性名。 1029 1030从API version 9开始,该接口支持在ArkTS卡片中使用。 1031 1032**返回值:** 1033 1034| 类型 | 描述 | 1035| ------------------------------ | -------------------- | 1036| IterableIterator<string> | LocalStorage中所有的属性名。 | 1037 1038 1039```ts 1040let para:Record<string,number> = { 'PropA': 47 }; 1041let storage: LocalStorage = new LocalStorage(para); 1042let keys: IterableIterator<string> = storage.keys(); 1043``` 1044 1045 1046### size<sup>9+</sup> 1047 1048size(): number 1049 1050返回LocalStorage中的属性数量。 1051 1052从API version 9开始,该接口支持在ArkTS卡片中使用。 1053 1054**返回值:** 1055 1056| 类型 | 描述 | 1057| ------ | --------- | 1058| number | 返回键值对的数量。 | 1059 1060 1061```ts 1062let para:Record<string,number> = { 'PropA': 47 }; 1063let storage: LocalStorage = new LocalStorage(para); 1064let res: number = storage.size(); // 1 1065``` 1066 1067 1068### clear<sup>9+</sup> 1069 1070clear(): boolean 1071 1072 1073清除LocalStorage的所有的属性。在LocalStorage中清除所有属性的前提是已经没有任何订阅者。如果有则返回false;清除成功返回true。 1074 1075从API version 9开始,该接口支持在ArkTS卡片中使用。 1076 1077**返回值:** 1078 1079 1080| 类型 | 描述 | 1081| ------- | ---------------------------------------- | 1082| boolean | 如果LocalStorage中的属性已经没有任何订阅者,则清除成功,返回true。否则返回false。 | 1083 1084 1085 1086```ts 1087let para:Record<string,number> = { 'PropA': 47 }; 1088let storage: LocalStorage = new LocalStorage(para); 1089let res: boolean = storage.clear(); // true, there are no subscribers 1090``` 1091 1092 1093### GetShared<sup>(deprecated)</sup> 1094 1095static GetShared(): LocalStorage 1096 1097获取当前stage共享的LocalStorage实例。 1098 1099从API version 9开始,该接口支持在ArkTS卡片中使用。 1100 1101从API version 10开始废弃,推荐使用[getShared10+](#getshared10)。 1102 1103**模型约束:**此接口仅可在Stage模型下使用。 1104 1105**返回值:** 1106 1107| 类型 | 描述 | 1108| ------------------------------ | ----------------- | 1109| [LocalStorage](#localstorage9) | 返回LocalStorage实例。 | 1110 1111 1112```ts 1113let storage: LocalStorage = LocalStorage.GetShared(); 1114``` 1115 1116 1117## SubscribedAbstractProperty 1118 1119 1120### get<sup>9+</sup> 1121 1122abstract get(): T 1123 1124读取从AppStorage/LocalStorage同步属性的数据。 1125 1126从API version 9开始,该接口支持在ArkTS卡片中使用。 1127 1128**返回值:** 1129 1130| 类型 | 描述 | 1131| ---- | ------------------------------- | 1132| T | AppStorage/LocalStorage同步属性的数据。 | 1133 1134 1135```ts 1136AppStorage.SetOrCreate('PropA', 47); 1137let prop1:SubscribedAbstractProperty<number> = AppStorage.Prop('PropA'); 1138prop1.get(); // prop1.get()=47 1139``` 1140 1141 1142### set<sup>9+</sup> 1143 1144abstract set(newValue: T): void 1145 1146设置AppStorage/LocalStorage同步属性的数据。 1147 1148从API version 9开始,该接口支持在ArkTS卡片中使用。 1149 1150 1151**参数:** 1152 1153 1154| 参数名 | 类型 | 必填 | 参数描述 | 1155| -------- | ---- | ---- | ------- | 1156| newValue | T | 是 | 要设置的数据。 | 1157 1158 1159 1160```ts 1161AppStorage.SetOrCreate('PropA', 47); 1162let prop1:SubscribedAbstractProperty<number> = AppStorage.Prop('PropA'); 1163prop1.set(1); // prop1.get()=1 1164``` 1165 1166### aboutToBeDeleted<sup>10+</sup> 1167 1168abstract aboutToBeDeleted(): void 1169 1170取消SubscribedAbstractProperty实例对AppStorage/LocalStorage单/双向同步关系。 1171 1172 1173```ts 1174AppStorage.SetOrCreate('PropA', 47); 1175let link = AppStorage.SetAndLink('PropB', 49); // PropA -> 47, PropB -> 49 1176link.aboutToBeDeleted(); 1177link.set(50); // PropB -> 49, link.get() --> undefined 1178``` 1179 1180 1181## PersistentStorage 1182 1183 1184PersistentStorage具体UI使用说明,详见[PersistentStorage(持久化存储UI状态)](../../quick-start/arkts-persiststorage.md) 1185 1186 1187### PersistPropsOptions 1188 1189| 参数名 | 类型 | 必填 | 参数描述 | 1190| ------------ | ----------------------- | ---- | ------------------------------------------------------------ | 1191| key | string | 是 | 属性名。 | 1192| defaultValue | number\|string\|boolean | 是 | 在PersistentStorage和AppStorage未查询到时,则使用默认值初始化初始化它。不允许为undefined和null。 | 1193 1194 1195### persistProp<sup>10+</sup> 1196 1197static persistProp<T>(key: string, defaultValue: T): void 1198 1199将AppStorage中key对应的属性持久化到文件中。该接口的调用通常在访问AppStorage之前。 1200 1201确定属性的类型和值的顺序如下: 1202 12031. 如果PersistentStorage文件中存在key对应的属性,在AppStorage中创建对应的propName,并用在PersistentStorage中找到的key的属性初始化。 1204 12052. 如果PersistentStorage文件中没有查询到key对应的属性,则在AppStorage中查找key对应的属性。如果找到key对应的属性,则将该属性持久化。 1206 12073. 如果AppStorage也没查找到key对应的属性,则在AppStorage中创建key对应的属性。用defaultValue初始化其值,并将该属性持久化。 1208 1209根据上述的初始化流程,如果AppStorage中有该属性,则会使用其值,覆盖掉PersistentStorage文件中的值。由于AppStorage是内存内数据,该行为会导致数据丧失持久化能力。 1210 1211**参数:** 1212 1213| 参数名 | 类型 | 必填 | 参数描述 | 1214| ------------ | ------ | ---- | ---------------------------------------- | 1215| key | string | 是 | 属性名。 | 1216| defaultValue | T | 是 | 在PersistentStorage和AppStorage未查询到时,则使用默认值初始化初始化它。不允许为undefined和null。 | 1217 1218 1219**示例:** 1220 1221 1222persistProp具体使用,见[从AppStorage中访问PersistentStorage初始化的属性](../../quick-start/arkts-persiststorage.md#从appstorage中访问persistentstorage初始化的属性) 1223 1224 1225### deleteProp<sup>10+</sup> 1226 1227static deleteProp(key: string): void 1228 1229PersistProp的逆向操作。将key对应的属性从PersistentStorage删除,后续AppStorage的操作,对PersistentStorage不会再有影响。 1230 1231**参数:** 1232 1233| 参数名 | 类型 | 必填 | 参数描述 | 1234| ---- | ------ | ---- | ----------------------- | 1235| key | string | 是 | PersistentStorage中的属性名。 | 1236 1237 1238```ts 1239PersistentStorage.deleteProp('highScore'); 1240``` 1241 1242 1243### persistProps<sup>10+</sup> 1244 1245static persistProps(props: PersistPropsOptions[]): void 1246 1247行为和PersistProp类似,不同在于可以一次性持久化多个数据,适合在应用启动的时候初始化。 1248 1249**参数:** 1250 1251| 参数名 | 类型 | 必填 | 参数描述 | 1252| ---------- | ---------------------------------------- | ---- | ---------------------------------------- | 1253| props | [PersistPropsOptions](#persistpropsoptions)[] | 是 | 持久化数组。 | 1254 1255 1256```ts 1257PersistentStorage.persistProps([{ key: 'highScore', defaultValue: '0' }, { key: 'wightScore', defaultValue: '1' }]); 1258``` 1259 1260 1261### keys<sup>10+</sup> 1262 1263static keys(): Array<string> 1264 1265返回所有持久化属性的key的数组。 1266 1267**返回值:** 1268 1269| 类型 | 描述 | 1270| ------------------- | ----------------- | 1271| Array<string> | 返回所有持久化属性的key的数组。 | 1272 1273 1274```ts 1275let keys: Array<string> = PersistentStorage.keys(); 1276``` 1277 1278 1279### PersistProp<sup>(deprecated)</sup> 1280 1281static PersistProp<T>(key: string, defaultValue: T): void 1282 1283将AppStorage中key对应的属性持久化到文件中。该接口的调用通常在访问AppStorage之前。 1284 1285确定属性的类型和值的顺序如下: 1286 12871. 如果PersistentStorage文件中存在key对应的属性,在AppStorage中创建对应的propName,并用在PersistentStorage中找到的key的属性初始化。 1288 12892. 如果PersistentStorage文件中没有查询到key对应的属性,则在AppStorage中查找key对应的属性。如果找到key对应的属性,则将该属性持久化。 1290 12913. 如果AppStorage也没查找到key对应的属性,则在AppStorage中创建key对应的属性。用defaultValue初始化其值,并将该属性持久化。 1292 1293根据上述的初始化流程,如果AppStorage中有该属性,则会使用其值,覆盖掉PersistentStorage文件中的值。由于AppStorage是内存内数据,该行为会导致数据丧失持久化能力。 1294 1295从API version 10开始废弃,推荐使用[persistProp10+](#persistprop10)。 1296 1297**参数:** 1298 1299| 参数名 | 类型 | 必填 | 参数描述 | 1300| ------------ | ------ | ---- | ---------------------------------------- | 1301| key | string | 是 | 属性名。 | 1302| defaultValue | T | 是 | 在PersistentStorage和AppStorage未查询到时,则使用默认值初始化初始化它。不允许为undefined和null。 | 1303 1304 1305**示例:** 1306 1307 1308```ts 1309PersistentStorage.PersistProp('highScore', '0'); 1310``` 1311 1312 1313### DeleteProp<sup>(deprecated)</sup> 1314 1315static DeleteProp(key: string): void 1316 1317PersistProp的逆向操作。将key对应的属性从PersistentStorage删除,后续AppStorage的操作,对PersistentStorage不会再有影响。 1318 1319从API version 10开始废弃,推荐使用[deleteProp10+](#deleteprop10)。 1320 1321**参数:** 1322 1323| 参数名 | 类型 | 必填 | 参数描述 | 1324| ---- | ------ | ---- | ----------------------- | 1325| key | string | 是 | PersistentStorage中的属性名。 | 1326 1327 1328```ts 1329PersistentStorage.DeleteProp('highScore'); 1330``` 1331 1332 1333### PersistProps<sup>(deprecated)</sup> 1334 1335static PersistProps(properties: {key: string, defaultValue: any;}[]): void 1336 1337行为和PersistProp类似,不同在于可以一次性持久化多个数据,适合在应用启动的时候初始化。 1338 1339从API version 10开始废弃,推荐使用[persistProps10+](#persistprops10)。 1340 1341**参数:** 1342 1343| 参数名 | 类型 | 必填 | 参数描述 | 1344| ---------- | ------------------------------------------------- | ---- | ------------------------------------------------------------ | 1345| properties | {key: string, defaultValue: any}[] | 是 | 持久化数组,启动key为属性名,defaultValue为默认值。规则同PersistProp。 | 1346 1347 1348```ts 1349PersistentStorage.PersistProps([{ key: 'highScore', defaultValue: '0' }, { key: 'wightScore', defaultValue: '1' }]); 1350``` 1351 1352 1353### Keys<sup>(deprecated)</sup> 1354 1355static Keys(): Array<string> 1356 1357返回所有持久化属性的key的数组。 1358 1359从API version 10开始废弃,推荐使用[keys10+](#keys10-1)。 1360 1361**返回值:** 1362 1363| 类型 | 描述 | 1364| ------------------- | ----------------- | 1365| Array<string> | 返回所有持久化属性的key的数组。 | 1366 1367 1368```ts 1369let keys: Array<string> = PersistentStorage.Keys(); 1370``` 1371 1372 1373## Environment 1374 1375 1376Environment具体使用说明,详见[Environment(设备环境查询)](../../quick-start/arkts-environment.md) 1377 1378 1379### EnvPropsOptions 1380 1381| 参数名 | 类型 | 必填 | 参数描述 | 1382| ------------ | ----------------------- | ---- | ------------------------------------------------------------ | 1383| key | string | 是 | 环境变量名称,支持的范围详见[内置环境变量说明](#内置环境变量说明)。 | 1384| defaultValue | number\|string\|boolean | 是 | 查询不到环境变量key,则使用defaultValue作为默认值存入AppStorage中。 | 1385 1386 1387### envProp<sup>10+</sup> 1388 1389static envProp<S>(key: string, value: S): boolean 1390 1391将Environment的内置环境变量key存入AppStorage中。如果系统中未查询到Environment环境变量key的值,则使用默认值value,存入成功,返回true。如果AppStorage已经有对应的key,则返回false。 1392 1393所以建议在程序启动的时候调用该接口。 1394 1395在没有调用EnvProp,就使用AppStorage读取环境变量是错误的。 1396 1397**参数:** 1398 1399| 参数名 | 类型 | 必填 | 参数描述 | 1400| ----- | ------ | ---- | --------------------------------------- | 1401| key | string | 是 | 环境变量名称,支持的范围详见[内置环境变量说明](#内置环境变量说明)。 | 1402| value | S | 是 | 查询不到环境变量key,则使用value作为默认值存入AppStorage中。 | 1403 1404**返回值:** 1405 1406| 类型 | 描述 | 1407| ------- | ---------------------------------------- | 1408| boolean | 如果key对应的属性在AppStorage中存在,则返回false。不存在则在AppStorage中创建key对应的属性,返回true。 | 1409 1410**示例:** 1411 1412 1413envProp具体使用,见[从UI中访问Environment参数](../../quick-start/arkts-environment.md#从ui中访问environment参数) 1414 1415 1416### envProps<sup>10+</sup> 1417 1418static envProps(props: EnvPropsOptions[]): void 1419 1420和EnvProp类似,不同点在于参数为数组,可以一次性初始化多个数据。建议在应用启动时调用,将系统环境变量批量存入AppStorage中。 1421 1422**参数:** 1423 1424| 参数名 | 类型 | 必填 | 参数描述 | 1425| ------ | --------------------------------------------- | ---- | ------------------------------------ | 1426| props | [EnvPropsOptions](#envpropsoptions)[] | 是 | 系统环境变量和默认值的键值对的数组。 | 1427 1428 1429```ts 1430Environment.envProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { 1431 key: 'languageCode', 1432 defaultValue: 'en' 1433}, { key: 'prop', defaultValue: 'hhhh' }]); 1434``` 1435 1436 1437### keys<sup>10+</sup> 1438 1439static keys(): Array<string> 1440 1441返回环境变量的属性key的数组。 1442 1443**返回值:** 1444 1445| 类型 | 描述 | 1446| ------------------- | ----------- | 1447| Array<string> | 返回关联的系统项数组。 | 1448 1449 1450```ts 1451Environment.envProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { 1452 key: 'languageCode', 1453 defaultValue: 'en' 1454}, { key: 'prop', defaultValue: 'hhhh' }]); 1455 1456let keys: Array<string> = Environment.keys(); // accessibilityEnabled, languageCode, prop 1457``` 1458 1459 1460### EnvProp<sup>(deprecated)</sup> 1461 1462static EnvProp<S>(key: string, value: S): boolean 1463 1464将Environment的内置环境变量key存入AppStorage中。如果系统中未查询到Environment环境变量key的值,则使用默认值value,存入成功,返回true。如果AppStorage已经有对应的key,则返回false。 1465 1466所以建议在程序启动的时候调用该接口。 1467 1468在没有调用EnvProp,就使用AppStorage读取环境变量是错误的。 1469 1470从API version 10开始废弃,推荐使用[envProp10+](#envprop10)。 1471 1472**参数:** 1473 1474| 参数名 | 类型 | 必填 | 参数描述 | 1475| ----- | ------ | ---- | --------------------------------------- | 1476| key | string | 是 | 环境变量名称,支持的范围详见[内置环境变量说明](#内置环境变量说明)。 | 1477| value | S | 是 | 查询不到环境变量key,则使用value作为默认值存入AppStorage中。 | 1478 1479**返回值:** 1480 1481| 类型 | 描述 | 1482| ------- | ---------------------------------------- | 1483| boolean | 如果key对应的属性在AppStorage中存在,则返回false。不存在则在AppStorage中创建key对应的属性,返回true。 | 1484 1485**示例:** 1486 1487 1488```ts 1489Environment.EnvProp('accessibilityEnabled', 'default'); 1490``` 1491 1492 1493### EnvProps<sup>(deprecated)</sup> 1494 1495static EnvProps(props: {key: string; defaultValue: any;}[]): void 1496 1497和EnvProp类似,不同点在于参数为数组,可以一次性初始化多个数据。建议在应用启动时调用,将系统环境变量批量存入AppStorage中。 1498 1499从API version 10开始废弃,推荐使用[envProps10+](#envprops10)。 1500 1501**参数:** 1502 1503| 参数名 | 类型 | 必填 | 参数描述 | 1504| ----- | ---------------------------------------- | ---- | ------------------ | 1505| props | {key: string, defaultValue: any}[] | 是 | 系统环境变量和默认值的键值对的数组。 | 1506 1507 1508```ts 1509Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { 1510 key: 'languageCode', 1511 defaultValue: 'en' 1512}, { key: 'prop', defaultValue: 'hhhh' }]); 1513``` 1514 1515 1516### Keys<sup>(deprecated)</sup> 1517 1518static Keys(): Array<string> 1519 1520返回环境变量的属性key的数组。 1521 1522从API version 10开始废弃,推荐使用[keys10+](#keys10-2)。 1523 1524**返回值:** 1525 1526| 类型 | 描述 | 1527| ------------------- | ----------- | 1528| Array<string> | 返回关联的系统项数组。 | 1529 1530 1531```ts 1532Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { 1533 key: 'languageCode', 1534 defaultValue: 'en' 1535}, { key: 'prop', defaultValue: 'hhhh' }]); 1536 1537let keys: Array<string> = Environment.Keys(); // accessibilityEnabled, languageCode, prop 1538``` 1539 1540 1541## 内置环境变量说明 1542 1543| key | 类型 | 说明 | 1544| -------------------- | --------------- | ---------------------------------------- | 1545| accessibilityEnabled | string | 无障碍屏幕朗读是否启用。 | 1546| colorMode | ColorMode | 深浅色模式,可选值为:<br/>- ColorMode.LIGHT:浅色模式;<br/>- ColorMode.DARK:深色模式。 | 1547| fontScale | number | 字体大小比例。 | 1548| fontWeightScale | number | 字重比例。 | 1549| layoutDirection | LayoutDirection | 布局方向类型,可选值为:<br/>- LayoutDirection.LTR:从左到右;<br/>- LayoutDirection.RTL:从右到左。 | 1550| languageCode | string | 当前系统语言,小写字母,例如zh。 |