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