• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;T&gt; | 返回双向绑定的数据,如果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&lt;T&gt;(propName: string, defaultValue: T): SubscribedAbstractProperty&lt;T&gt;
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&lt;T&gt; | SubscribedAbstractProperty&lt;T&gt;的实例,和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&lt;T&gt;(propName: string): SubscribedAbstractProperty&lt;T&gt;
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&lt;T&gt; | 返回单向绑定的数据,如果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&lt;T&gt;(propName: string, defaultValue: T): SubscribedAbstractProperty&lt;T&gt;
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&lt;T&gt; | SubscribedAbstractProperty&lt;T&gt;的实例。 |
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&lt;T&gt;(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&nbsp;\|&nbsp;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&lt;T&gt;(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&lt;T&gt;(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&lt;string&gt;
275
276返回AppStorage中所有的属性名。
277
278**返回值:**
279
280| 类型                             | 描述                 |
281| ------------------------------ | ------------------ |
282| IterableIterator&lt;string&gt; | 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&lt;T&gt;(propName: string, defaultValue: T): SubscribedAbstractProperty&lt;T&gt;
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&lt;T&gt; | SubscribedAbstractProperty&lt;T&gt;的实例,和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&lt;S&gt;(propName: string, defaultValue: S): SubscribedAbstractProperty&lt;S&gt;
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&lt;S&gt; | SubscribedAbstractProperty&lt;S&gt;的实例。 |
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&lt;T&gt;(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&nbsp;\|&nbsp;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&lt;T&gt;(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&lt;T&gt;(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&lt;string&gt;
593
594返回AppStorage中所有的属性名。
595
596从API version 10开始废弃,推荐使用[keys10+](#keys10)。
597
598**返回值:**
599
600| 类型                             | 描述                 |
601| ------------------------------ | ------------------ |
602| IterableIterator&lt;string&gt; | 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&lt;T&gt;(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&nbsp;\|&nbsp;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&lt;T&gt;(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&lt;T&gt;(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&lt;T&gt;(propName: string): SubscribedAbstractProperty&lt;T&gt;
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&lt;T&gt; | SubscribedAbstractProperty&lt;T&gt;的实例,如果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&lt;T&gt;(propName: string, defaultValue: T): SubscribedAbstractProperty&lt;T&gt;
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&lt;T&gt; | SubscribedAbstractProperty&lt;T&gt;的实例,如果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&lt;S&gt;(propName: string): SubscribedAbstractProperty&lt;S&gt;
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&lt;S&gt; | SubscribedAbstractProperty&lt;S&gt;的实例,如果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&lt;S&gt;(propName: string, defaultValue: S): SubscribedAbstractProperty&lt;S&gt;
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&lt;S&gt; | SubscribedAbstractProperty&lt;S&gt;的实例,和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&lt;string&gt;
1027
1028返回AppStorage中所有的属性名。
1029
1030从API version 9开始,该接口支持在ArkTS卡片中使用。
1031
1032**返回值:**
1033
1034| 类型                             | 描述                   |
1035| ------------------------------ | -------------------- |
1036| IterableIterator&lt;string&gt; | 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&lt;T&gt;(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&lt;string&gt;
1264
1265返回所有持久化属性的key的数组。
1266
1267**返回值:**
1268
1269| 类型                  | 描述                |
1270| ------------------- | ----------------- |
1271| Array&lt;string&gt; | 返回所有持久化属性的key的数组。 |
1272
1273
1274```ts
1275let keys: Array<string> = PersistentStorage.keys();
1276```
1277
1278
1279### PersistProp<sup>(deprecated)</sup>
1280
1281static PersistProp&lt;T&gt;(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:&nbsp;string,&nbsp;defaultValue:&nbsp;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&lt;string&gt;
1356
1357返回所有持久化属性的key的数组。
1358
1359从API version 10开始废弃,推荐使用[keys10+](#keys10-1)。
1360
1361**返回值:**
1362
1363| 类型                  | 描述                |
1364| ------------------- | ----------------- |
1365| Array&lt;string&gt; | 返回所有持久化属性的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&lt;S&gt;(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&lt;string&gt;
1440
1441返回环境变量的属性key的数组。
1442
1443**返回值:**
1444
1445| 类型                  | 描述          |
1446| ------------------- | ----------- |
1447| Array&lt;string&gt; | 返回关联的系统项数组。 |
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&lt;S&gt;(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:&nbsp;string,&nbsp;defaultValue:&nbsp;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&lt;string&gt;
1519
1520返回环境变量的属性key的数组。
1521
1522从API version 10开始废弃,推荐使用[keys10+](#keys10-2)。
1523
1524**返回值:**
1525
1526| 类型                  | 描述          |
1527| ------------------- | ----------- |
1528| Array&lt;string&gt; | 返回关联的系统项数组。 |
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/>-&nbsp;ColorMode.LIGHT:浅色模式;<br/>-&nbsp;ColorMode.DARK:深色模式。 |
1547| fontScale            | number          | 字体大小比例。                                  |
1548| fontWeightScale      | number          | 字重比例。                                    |
1549| layoutDirection      | LayoutDirection | 布局方向类型,可选值为:<br/>-&nbsp;LayoutDirection.LTR:从左到右;<br/>-&nbsp;LayoutDirection.RTL:从右到左。 |
1550| languageCode         | string          | 当前系统语言,小写字母,例如zh。                        |