• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 应用级变量的状态管理
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @zzq212050299-->
5<!--Designer: @s10021109-->
6<!--Tester: @TerryTsao-->
7<!--Adviser: @zhang_yixin13-->
8
9状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。
10
11>**说明:**
12>
13>本模块首批接口从API version 7开始支持,后续版本的新增接口,采用上角标单独标记接口的起始版本。
14
15本文中T和S的含义如下:
16
17| 类型   | 说明                                     |
18| ---- | -------------------------------------- |
19| T    | Class,number,boolean,string和这些类型的数组形式。 |
20| S    | number,boolean,string。                 |
21
22## AppStorage
23
24AppStorage具体UI使用说明,详见[AppStorage(应用全局的UI状态存储)](../../../ui/state-management/arkts-appstorage.md)
25
26**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
27
28**系统能力:** SystemCapability.ArkUI.ArkUI.Full
29
30### ref<sup>12+</sup>
31
32static ref\<T\>(propName: string): AbstractProperty\<T\>&nbsp;|&nbsp;undefined
33
34如果给定的propName在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在,则返回AppStorage中propName对应数据的引用。否则,返回undefined。
35
36与[link](#link10)的功能基本一致,但不需要手动释放返回的[AbstractProperty](#abstractproperty)类型的变量。
37
38**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
39
40**系统能力:** SystemCapability.ArkUI.ArkUI.Full
41
42**参数:**
43
44| 参数名   | 类型   | 必填 | 说明               |
45| -------- | ------ | ---- | ---------------------- |
46| propName | string | 是   | AppStorage中的属性名。 |
47
48**返回值:**
49
50| 类型                                   | 说明                                                         |
51| -------------------------------------- | ------------------------------------------------------------ |
52| [AbstractProperty&lt;T&gt;](#abstractproperty) \| undefined | AppStorage中propName对应属性的引用,如果AppStorage中不存在对应的propName,则返回undefined。 |
53
54**示例:**
55
56```ts
57AppStorage.setOrCreate('PropA', 47);
58let refToPropA1: AbstractProperty<number> | undefined = AppStorage.ref('PropA');
59let refToPropA2: AbstractProperty<number> | undefined = AppStorage.ref('PropA'); // refToPropA2.get() == 47
60refToPropA1?.set(48); // 同步修改AppStorage: refToPropA1.get() == refToPropA2.get() == 48
61```
62
63### setAndRef<sup>12+</sup>
64
65static setAndRef&lt;T&gt;(propName: string, defaultValue: T): AbstractProperty&lt;T&gt;
66
67与[ref](#ref12)接口类似,如果给定的propName在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在,则返回AppStorage中propName对应数据的引用。如果不存在,则使用defaultValue在AppStorage中创建和初始化propName对应的属性,并返回其引用。defaultValue须为T类型,可以为null或undefined。
68
69与[setAndLink](#setandlink10)的功能基本一致,但不需要手动释放返回的[AbstractProperty](#abstractproperty)类型的变量。
70
71> **说明:**<br/>
72> 从API version 12开始,AppStorage支持[Map](../../../ui/state-management/arkts-appstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-appstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-appstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-appstorage.md#appstorage支持联合类型)。
73
74**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
75
76**系统能力:** SystemCapability.ArkUI.ArkUI.Full
77
78**参数:**
79
80| 参数名       | 类型   | 必填 | 说明                                                     |
81| ------------ | ------ | ---- | ------------------------------------------------------------ |
82| propName     | string | 是   | AppStorage中的属性名。                                       |
83| defaultValue | T      | 是   | 当propName在AppStorage中不存在时,使用defaultValue在AppStorage中初始化对应的propName,defaultValue可以为null或undefined。 |
84
85**返回值:**
86
87| 类型                      | 说明                                                         |
88| ------------------------- | ------------------------------------------------------------ |
89| [AbstractProperty&lt;T&gt;](#abstractproperty) | AbstractProperty&lt;T&gt;的实例,为AppStorage中propName对应属性的引用。 |
90
91**示例:**
92
93```ts
94AppStorage.setOrCreate('PropA', 47);
95let ref1: AbstractProperty<number> = AppStorage.setAndRef('PropB', 49); // 用默认值49创建PropB
96let ref2: AbstractProperty<number> = AppStorage.setAndRef('PropA', 50); // PropA已存在,值为47
97```
98
99### link<sup>10+</sup>
100
101static link&lt;T&gt;(propName: string): SubscribedAbstractProperty&lt;T&gt;
102
103与[AppStorage](../../../ui/state-management/arkts-appstorage.md)中对应的propName建立双向数据绑定。如果给定的propName在AppStorage中存在,返回AppStorage中propName对应属性的双向绑定数据。
104
105双向绑定数据的修改会同步回AppStorage中,AppStorage会将变化同步到所有绑定该propName的数据和自定义组件中。
106
107如果AppStorage中不存在propName,则返回undefined。
108
109**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
110
111**系统能力:** SystemCapability.ArkUI.ArkUI.Full
112
113**参数:**
114
115| 参数名      | 类型     | 必填   | 说明             |
116| -------- | ------ | ---- | ---------------- |
117| propName | string | 是    | AppStorage中的属性名。 |
118
119**返回值:**
120
121| 类型                                | 说明                                                         |
122| ----------------------------------- | ------------------------------------------------------------ |
123| [SubscribedAbstractProperty&lt;T&gt;](#subscribedabstractproperty) | 返回双向绑定的数据,如果AppStorage中不存在对应的propName,则返回undefined。 |
124
125**示例:**
126```ts
127AppStorage.setOrCreate('PropA', 47);
128let linkToPropA1: SubscribedAbstractProperty<number> = AppStorage.link('PropA');
129let linkToPropA2: SubscribedAbstractProperty<number> = AppStorage.link('PropA'); // linkToPropA2.get() == 47
130linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48
131```
132
133### setAndLink<sup>10+</sup>
134
135static setAndLink&lt;T&gt;(propName: string, defaultValue: T): SubscribedAbstractProperty&lt;T&gt;
136
137与[link](#link10)接口类似,如果给定的propName在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在AppStorage中创建和初始化propName对应的属性,返回其双向绑定数据。defaultValue必须为T类型,从API version 12开始defaultValue可以为null或undefined。
138
139> **说明:**<br/>
140> 从API version 12开始,AppStorage支持[Map](../../../ui/state-management/arkts-appstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-appstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-appstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-appstorage.md#appstorage支持联合类型)。
141
142**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
143
144**系统能力:** SystemCapability.ArkUI.ArkUI.Full
145
146**参数:**
147
148| 参数名       | 类型   | 必填 | 说明                                                     |
149| ------------ | ------ | ---- | ------------------------------------------------------------ |
150| propName     | string | 是   | AppStorage中的属性名。                                       |
151| defaultValue | T      | 是   | 当propName在AppStorage中不存在时,使用defaultValue在AppStorage中初始化对应的propName,从API version 12开始,defaultValue可以为null或undefined。 |
152
153**返回值:**
154
155| 类型                                  | 说明                                       |
156| ----------------------------------- | ---------------------------------------- |
157| [SubscribedAbstractProperty&lt;T&gt;](#subscribedabstractproperty) | SubscribedAbstractProperty&lt;T&gt;的实例,为AppStorage中propName对应属性的双向绑定的数据。 |
158
159**示例:**
160```ts
161AppStorage.setOrCreate('PropA', 47);
162let link1: SubscribedAbstractProperty<number> = AppStorage.setAndLink('PropB', 49); // 用默认值49创建PropB
163let link2: SubscribedAbstractProperty<number> = AppStorage.setAndLink('PropA', 50); // PropA已存在,值为47
164```
165
166### prop<sup>10+</sup>
167
168static prop&lt;T&gt;(propName: string): SubscribedAbstractProperty&lt;T&gt;
169
170与[AppStorage](../../../ui/state-management/arkts-appstorage.md)中对应的propName建立单向属性绑定。如果给定的propName在AppStorage中存在,则返回与AppStorage中propName对应属性的单向绑定数据。如果AppStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回AppStorage中。
171
172**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
173
174**系统能力:** SystemCapability.ArkUI.ArkUI.Full
175
176**参数:**
177
178| 参数名      | 类型     | 必填   | 说明             |
179| -------- | ------ | ---- | ---------------- |
180| propName | string | 是    | AppStorage中的属性名。 |
181
182**返回值:**
183
184| 类型                                | 说明                                                         |
185| ----------------------------------- | ------------------------------------------------------------ |
186| [SubscribedAbstractProperty&lt;T&gt;](#subscribedabstractproperty) | 返回单向绑定的数据,如果AppStorage中不存在对应的propName,则返回undefined。 |
187
188**示例:**
189
190```ts
191AppStorage.setOrCreate('PropA', 47);
192let prop1: SubscribedAbstractProperty<number> = AppStorage.prop('PropA');
193let prop2: SubscribedAbstractProperty<number> = AppStorage.prop('PropA');
194prop1.set(1); // 单向同步:prop1.get()的值为1,prop2.get()的值为47
195```
196
197### setAndProp<sup>10+</sup>
198
199static setAndProp&lt;T&gt;(propName: string, defaultValue: T): SubscribedAbstractProperty&lt;T&gt;
200
201与[prop](#prop10)接口类似。如果给定的propName在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在AppStorage中创建和初始化propName对应的属性,返回其单向绑定数据。defaultValue必须为T类型,从API version 12开始defaultValue可以为null或undefined。
202
203> **说明:**<br/>
204> 从API version 12开始,AppStorage支持[Map](../../../ui/state-management/arkts-appstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-appstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-appstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-appstorage.md#appstorage支持联合类型)。
205
206**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
207
208**系统能力:** SystemCapability.ArkUI.ArkUI.Full
209
210**参数:**
211
212| 参数名       | 类型   | 必填 | 说明                                                     |
213| ------------ | ------ | ---- | ------------------------------------------------------------ |
214| propName     | string | 是   | AppStorage中的属性名。                                       |
215| defaultValue | T      | 是   | 当propName在AppStorage中不存在时,使用defaultValue在AppStorage中初始化对应的propName,从API version 12开始,defaultValue可以为null或undefined。 |
216
217**返回值:**
218
219| 类型                                  | 说明                                      |
220| ----------------------------------- | --------------------------------------- |
221| [SubscribedAbstractProperty&lt;T&gt;](#subscribedabstractproperty) | SubscribedAbstractProperty&lt;T&gt;的实例。 |
222
223**示例:**
224```ts
225AppStorage.setOrCreate('PropA', 47);
226let prop: SubscribedAbstractProperty<number> = AppStorage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49
227```
228
229### has<sup>10+</sup>
230
231static has(propName: string): boolean
232
233判断propName对应的属性是否在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在。
234
235**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
236
237**系统能力:** SystemCapability.ArkUI.ArkUI.Full
238
239**参数:**
240
241| 参数名      | 类型     | 必填   | 说明             |
242| -------- | ------ | ---- | ---------------- |
243| propName | string | 是    | AppStorage中的属性名。 |
244
245**返回值:**
246
247| 类型      | 说明                                       |
248| ------- | ---------------------------------------- |
249| boolean | 如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。 |
250
251**示例:**
252```ts
253AppStorage.has('simpleProp');
254```
255
256### get<sup>10+</sup>
257
258static get&lt;T&gt;(propName: string): T | undefined
259
260获取propName在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中对应的属性值。如果不存在则返回undefined。
261
262**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
263
264**系统能力:** SystemCapability.ArkUI.ArkUI.Full
265
266**参数:**
267
268| 参数名      | 类型     | 必填   | 说明             |
269| -------- | ------ | ---- | ---------------- |
270| propName | string | 是    | AppStorage中的属性名。 |
271
272**返回值:**
273
274| 类型                     | 说明                                                        |
275| ------------------------ | ----------------------------------------------------------- |
276| T&nbsp;\|&nbsp;undefined | AppStorage中propName对应的属性,如果不存在则返回undefined。 |
277
278**示例:**
279```ts
280AppStorage.setOrCreate('PropA', 47);
281let value: number = AppStorage.get('PropA') as number; // 47
282```
283
284### set<sup>10+</sup>
285
286static set&lt;T&gt;(propName: string, newValue: T): boolean
287
288在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中设置propName对应属性的值。如果newValue的值和propName对应属性的值相同,即不需要做赋值操作,状态变量不会通知UI刷新propName对应属性的值,从API version 12开始,newValue可以为null或undefined。
289
290> **说明:**<br/>
291> 从API version 12开始,AppStorage支持[Map](../../../ui/state-management/arkts-appstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-appstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-appstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-appstorage.md#appstorage支持联合类型)。
292
293**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
294
295**系统能力:** SystemCapability.ArkUI.ArkUI.Full
296
297**参数:**
298
299| 参数名      | 类型     | 必填   | 说明                   |
300| -------- | ------ | ---- | ---------------------- |
301| propName | string | 是    | AppStorage中的属性名。       |
302| newValue | T      | 是    | 属性值,从API version 12开始可以为null或undefined。 |
303
304**返回值:**
305
306| 类型    | 说明                                                         |
307| ------- | ------------------------------------------------------------ |
308| boolean | 如果AppStorage中不存在propName对应的属性,或设值失败,则返回false。设置成功则返回true。 |
309
310**示例:**
311```ts
312AppStorage.setOrCreate('PropA', 48);
313let res: boolean = AppStorage.set('PropA', 47) // true
314let res1: boolean = AppStorage.set('PropB', 47) // false
315```
316
317### setOrCreate<sup>10+</sup>
318
319static setOrCreate&lt;T&gt;(propName: string, newValue: T): void
320
321如果propName已经在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在,并且newValue和propName对应属性的值不同,则设置propName对应属性的值为newValue,否则状态变量不会通知UI刷新propName对应属性的值。
322如果propName不存在,则创建propName属性,值为newValue。setOrCreate只可以创建单个AppStorage的键值对,如果想创建多个AppStorage键值对,可以多次调用此方法。从API version 12开始,newValue可以为null或undefined。
323
324> **说明:**<br/>
325> 从API version 12开始,AppStorage支持[Map](../../../ui/state-management/arkts-appstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-appstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-appstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-appstorage.md#appstorage支持联合类型)。
326
327**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
328
329**系统能力:** SystemCapability.ArkUI.ArkUI.Full
330
331**参数:**
332
333| 参数名      | 类型     | 必填   | 说明                   |
334| -------- | ------ | ---- | ---------------------- |
335| propName | string | 是    | AppStorage中的属性名。       |
336| newValue | T      | 是    | 属性值,从API version 12开始可以为null或undefined。 |
337
338**示例:**
339```ts
340AppStorage.setOrCreate('simpleProp', 121);
341```
342
343### delete<sup>10+</sup>
344
345static delete(propName: string): boolean
346
347在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中删除propName对应的属性。
348
349在AppStorage中删除该属性的前提是必须保证该属性没有订阅者。如果有订阅者,则返回false。如果没有订阅者,则删除成功并返回true。
350
351属性的订阅者为:
352
3531. [\@StorageLink](../../../ui/state-management/arkts-appstorage.md#storagelink)、[\@StorageProp](../../../ui/state-management/arkts-appstorage.md#storageprop)装饰的变量。
354
3552. 通过[link](#link10)、[prop](#prop10)、[setAndLink](#setandlink10)、[setAndProp](#setandprop10)接口返回的[SubscribedAbstractProperty](#subscribedabstractproperty)的实例。
356
357如果想要删除这些订阅者,可以通过以下方式:
358
3591. 删除\@StorageLink、\@StorageProp所在的自定义组件。删除自定义组件请参考[自定义组件的删除](../../../ui/state-management/arkts-page-custom-components-lifecycle.md#自定义组件的删除)。
360
3612. 对link、prop、setAndLink、setAndProp接口返回的SubscribedAbstractProperty的实例调用[aboutToBeDeleted](#abouttobedeleted10)接口。
362
363**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
364
365**系统能力:** SystemCapability.ArkUI.ArkUI.Full
366
367**参数:**
368
369| 参数名      | 类型     | 必填   | 说明             |
370| -------- | ------ | ---- | ---------------- |
371| propName | string | 是    | AppStorage中的属性名。 |
372
373**返回值:**
374
375| 类型      | 说明                                       |
376| ------- | ---------------------------------------- |
377| boolean | 如果AppStorage中有对应的属性,且该属性已经没有订阅者,则删除成功,返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。 |
378
379**示例:**
380```ts
381AppStorage.setOrCreate('PropA', 47);
382AppStorage.link<number>('PropA');
383let res: boolean = AppStorage.delete('PropA'); // false,PropA 还存在订阅者
384
385AppStorage.setOrCreate('PropB', 48);
386let res1: boolean = AppStorage.delete('PropB'); // true,PropB 已从AppStorage成功删除
387```
388
389### keys<sup>10+</sup>
390
391static keys(): IterableIterator&lt;string&gt;
392
393返回[AppStorage](../../../ui/state-management/arkts-appstorage.md)中所有的属性名。
394
395**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
396
397**系统能力:** SystemCapability.ArkUI.ArkUI.Full
398
399**返回值:**
400
401| 类型                             | 说明                 |
402| ------------------------------ | ------------------ |
403| IterableIterator&lt;string&gt; | AppStorage中所有的属性名。 |
404
405**示例:**
406```ts
407AppStorage.setOrCreate('PropB', 48);
408let keys: IterableIterator<string> = AppStorage.keys();
409```
410
411### clear<sup>10+</sup>
412
413static clear(): boolean
414
415删除[AppStorage](../../../ui/state-management/arkts-appstorage.md)中所有属性。删除所有属性的前提是,AppStorage已经没有任何订阅者。如果有订阅者,clear将不会生效并返回false。如果没有订阅者,则删除成功,并返回true。
416
417订阅者的含义参考[delete](#delete10)。
418
419**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
420
421**系统能力:** SystemCapability.ArkUI.ArkUI.Full
422
423**返回值:**
424
425| 类型    | 说明                                                         |
426| ------- | ------------------------------------------------------------ |
427| boolean | 如果AppStorage中的属性已经没有订阅者则删除成功,返回true;如果当前仍有订阅者,返回false。|
428
429**示例:**
430```ts
431AppStorage.setOrCreate('PropA', 47);
432let res: boolean = AppStorage.clear(); // true,已经没有订阅者
433```
434
435### size<sup>10+</sup>
436
437static size(): number
438
439返回[AppStorage](../../../ui/state-management/arkts-appstorage.md)中的属性数量。
440
441**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
442
443**系统能力:** SystemCapability.ArkUI.ArkUI.Full
444
445**返回值:**
446
447| 类型     | 说明                  |
448| ------ | ------------------- |
449| number | 返回AppStorage中属性的数量。 |
450
451**示例:**
452```ts
453AppStorage.setOrCreate('PropB', 48);
454let res: number = AppStorage.size(); // 1
455```
456
457### Link<sup>(deprecated)</sup>
458
459static Link(propName: string): any
460
461与[AppStorage](../../../ui/state-management/arkts-appstorage.md)中对应的propName建立双向数据绑定。如果给定的propName在AppStorage中存在,返回与AppStorage中propName对应属性的双向绑定数据。
462
463双向绑定数据的修改会同步回AppStorage中,AppStorage会将变化同步到所有绑定该propName的数据和自定义组件中。
464
465如果AppStorage中不存在propName,则返回undefined。
466
467> **说明:**<br/>
468> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[link10+](#link10)替代。
469
470**系统能力:** SystemCapability.ArkUI.ArkUI.Full
471
472**参数:**
473
474| 参数名      | 类型     | 必填   | 说明             |
475| -------- | ------ | ---- | ---------------- |
476| propName | string | 是    | AppStorage中的属性名。 |
477
478**返回值:**
479
480| 类型                             | 说明                                                         |
481| -------------------------------- | ------------------------------------------------------------ |
482| any | 返回双向绑定的数据,如果AppStorage中不存在对应的propName,则返回undefined。 |
483
484**示例:**
485```ts
486AppStorage.SetOrCreate('PropA', 47);
487let linkToPropA1: SubscribedAbstractProperty<number> = AppStorage.Link('PropA');
488let linkToPropA2: SubscribedAbstractProperty<number> = AppStorage.Link('PropA'); // linkToPropA2.get() == 47
489linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48
490```
491
492### SetAndLink<sup>(deprecated)</sup>
493
494static SetAndLink&lt;T&gt;(propName: string, defaultValue: T): SubscribedAbstractProperty&lt;T&gt;
495
496与[Link](#linkdeprecated)接口类似,如果给定的propName在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在AppStorage中创建和初始化propName对应的属性,并返回其双向绑定数据。defaultValue必须为T类型,且不能为null或undefined。
497
498> **说明:**<br/>
499> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[setAndLink10+](#setandlink10)替代。
500
501**系统能力:** SystemCapability.ArkUI.ArkUI.Full
502
503**参数:**
504
505| 参数名       | 类型   | 必填 | 说明                                                     |
506| ------------ | ------ | ---- | ------------------------------------------------------------ |
507| propName     | string | 是   | AppStorage中的属性名。                                       |
508| defaultValue | T      | 是   | 当propName在AppStorage中不存在,使用defaultValue在AppStorage中初始化对应的propName,defaultValue不能为null或undefined。 |
509
510**返回值:**
511
512| 类型                                  | 说明                                       |
513| ----------------------------------- | ---------------------------------------- |
514| [SubscribedAbstractProperty&lt;T&gt;](#subscribedabstractproperty) | SubscribedAbstractProperty&lt;T&gt;的实例,和AppStorage中propName对应属性的双向绑定的数据。 |
515
516**示例:**
517```ts
518AppStorage.SetOrCreate('PropA', 47);
519let link1: SubscribedAbstractProperty<number> = AppStorage.SetAndLink('PropB', 49); // 用默认值49创建PropB
520let link2: SubscribedAbstractProperty<number> = AppStorage.SetAndLink('PropA', 50); // PropA已存在,值为47
521```
522
523### Prop<sup>(deprecated)</sup>
524
525static Prop(propName: string): any
526
527与[AppStorage](../../../ui/state-management/arkts-appstorage.md)中对应的propName建立单向属性绑定。如果给定的propName在AppStorage中存在,则返回与AppStorage中propName对应属性的单向绑定数据。如果AppStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回AppStorage中。
528
529> **说明:**<br/>
530> Prop仅支持简单类型。
531> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[prop10+](#prop10)替代。
532
533**系统能力:** SystemCapability.ArkUI.ArkUI.Full
534
535**参数:**
536
537| 参数名      | 类型     | 必填   | 说明             |
538| -------- | ------ | ---- | ---------------- |
539| propName | string | 是    | AppStorage中的属性名。 |
540
541**返回值:**
542
543| 类型                             | 说明                                                         |
544| -------------------------------- | ------------------------------------------------------------ |
545| any | 返回单向绑定的数据,如果AppStorage中不存在对应的propName,则返回undefined。 |
546
547**示例:**
548```ts
549AppStorage.SetOrCreate('PropA', 47);
550let prop1: SubscribedAbstractProperty<number> = AppStorage.Prop('PropA');
551let prop2: SubscribedAbstractProperty<number> = AppStorage.Prop('PropA');
552prop1.set(1); // 单向同步:prop1.get()的值为1,prop2.get()的值为47
553```
554
555### SetAndProp<sup>(deprecated)</sup>
556
557static SetAndProp&lt;S&gt;(propName: string, defaultValue: S): SubscribedAbstractProperty&lt;S&gt;
558
559与[Prop](#propdeprecated)接口类似。如果给定的propName在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在AppStorage中创建和初始化propName对应的属性,返回其单向绑定数据。defaultValue必须为S类型,且不能为null或undefined。
560
561> **说明:**<br/>
562> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[setAndProp10+](#setandprop10)替代。
563
564**系统能力:** SystemCapability.ArkUI.ArkUI.Full
565
566**参数:**
567
568| 参数名       | 类型   | 必填 | 说明                                                     |
569| ------------ | ------ | ---- | ------------------------------------------------------------ |
570| propName     | string | 是   | AppStorage中的属性名。                                       |
571| defaultValue | S      | 是   | 当propName在AppStorage中不存在时,使用defaultValue在AppStorage中初始化对应的propName,defaultValue不能为null或undefined。 |
572
573**返回值:**
574
575| 类型                                  | 说明                                      |
576| ----------------------------------- | --------------------------------------- |
577| [SubscribedAbstractProperty&lt;S&gt;](#subscribedabstractproperty) | SubscribedAbstractProperty&lt;S&gt;的实例。 |
578
579**示例:**
580```ts
581AppStorage.SetOrCreate('PropA', 47);
582let prop: SubscribedAbstractProperty<number> = AppStorage.SetAndProp('PropB', 49); // PropA -> 47, PropB -> 49
583```
584
585### Has<sup>(deprecated)</sup>
586
587static Has(propName: string): boolean
588
589判断propName对应的属性是否在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在。
590
591> **说明:**<br/>
592> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[has10+](#has10)替代。
593
594**系统能力:** SystemCapability.ArkUI.ArkUI.Full
595
596**参数:**
597
598| 参数名      | 类型     | 必填   | 说明             |
599| -------- | ------ | ---- | ---------------- |
600| propName | string | 是    | AppStorage中的属性名。 |
601
602**返回值:**
603
604| 类型      | 说明                                       |
605| ------- | ---------------------------------------- |
606| boolean | 如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。 |
607
608**示例:**
609```ts
610AppStorage.Has('simpleProp');
611```
612
613### Get<sup>(deprecated)</sup>
614
615static Get&lt;T&gt;(propName: string): T | undefined
616
617获取propName在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中对应的属性值。如果不存在则返回undefined。
618
619> **说明:**<br/>
620> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[get10+](#get10)替代。
621
622**系统能力:** SystemCapability.ArkUI.ArkUI.Full
623
624**参数:**
625
626| 参数名      | 类型     | 必填   | 说明             |
627| -------- | ------ | ---- | ---------------- |
628| propName | string | 是    | AppStorage中的属性名。 |
629
630**返回值:**
631
632| 类型                     | 说明                                                         |
633| ------------------------ | ------------------------------------------------------------ |
634| T&nbsp;\|&nbsp;undefined | AppStorage中propName对应的属性值,如果不存在则返回undefined。 |
635
636**示例:**
637```ts
638AppStorage.SetOrCreate('PropA', 47);
639let value: number = AppStorage.Get('PropA') as number; // 47
640```
641
642### Set<sup>(deprecated)</sup>
643
644static Set&lt;T&gt;(propName: string, newValue: T): boolean
645
646在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中设置propName对应属性的值。
647
648> **说明:**<br/>
649> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[set10+](#set10)替代。
650
651**系统能力:** SystemCapability.ArkUI.ArkUI.Full
652
653**参数:**
654
655| 参数名   | 类型   | 必填 | 说明                        |
656| -------- | ------ | ---- | ------------------------------- |
657| propName | string | 是   | AppStorage中的属性名。          |
658| newValue | T      | 是   | 属性值,不能为null或undefined。 |
659
660**返回值:**
661
662| 类型    | 说明                                                         |
663| ------- | ------------------------------------------------------------ |
664| boolean | 如果AppStorage中不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功则返回true。 |
665
666**示例:**
667```ts
668AppStorage.SetOrCreate('PropA', 48);
669let res: boolean = AppStorage.Set('PropA', 47) // true
670let res1: boolean = AppStorage.Set('PropB', 47) // false
671```
672
673### SetOrCreate<sup>(deprecated)</sup>
674
675static SetOrCreate&lt;T&gt;(propName: string, newValue: T): void
676
677如果propName已经在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中存在,则设置propName对应的属性值为newValue。如果不存在,则创建propName属性,值为newValue。
678
679newValue不能为null或undefined。
680
681> **说明:**<br/>
682> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[setOrCreate10+](#setorcreate10)替代。
683
684**系统能力:** SystemCapability.ArkUI.ArkUI.Full
685
686**参数:**
687
688| 参数名   | 类型   | 必填 | 说明                        |
689| -------- | ------ | ---- | ------------------------------- |
690| propName | string | 是   | AppStorage中的属性名。          |
691| newValue | T      | 是   | 属性值,不能为null或undefined。 |
692
693**示例:**
694```ts
695AppStorage.SetOrCreate('simpleProp', 121);
696```
697
698### Delete<sup>(deprecated)</sup>
699
700static Delete(propName: string): boolean
701
702在[AppStorage](../../../ui/state-management/arkts-appstorage.md)中删除propName对应的属性。
703
704在AppStorage中删除该属性的前提是必须保证该属性没有订阅者。如果有订阅者,则返回false。如果没有订阅者则删除成功并返回true。
705
706属性的订阅者为[Link](#linkdeprecated)、[Prop](#propdeprecated)等接口绑定的propName,以及[\@StorageLink('propName')](../../../ui/state-management/arkts-appstorage.md#storagelink)和[\@StorageProp('propName')](../../../ui/state-management/arkts-appstorage.md#storageprop)。如果自定义组件中使用\@StorageLink('propName')和\@StorageProp('propName')或者SubscribedAbstractProperty实例依旧对propName有同步关系,则该属性不能从AppStorage中删除。
707
708> **说明:**<br/>
709> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[delete10+](#delete10)替代。
710
711**系统能力:** SystemCapability.ArkUI.ArkUI.Full
712
713**参数:**
714
715| 参数名      | 类型     | 必填   | 说明             |
716| -------- | ------ | ---- | ---------------- |
717| propName | string | 是    | AppStorage中的属性名。 |
718
719**返回值:**
720
721| 类型      | 说明                                       |
722| ------- | ---------------------------------------- |
723| boolean | 如果AppStorage中有对应的属性,且该属性已经没有订阅者,则删除成功,返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。 |
724
725**示例:**
726```ts
727AppStorage.SetOrCreate('PropA', 47);
728AppStorage.Link('PropA');
729let res: boolean = AppStorage.Delete('PropA'); // false,PropA 还存在订阅者
730
731AppStorage.SetOrCreate('PropB', 48);
732let res1: boolean = AppStorage.Delete('PropB'); // true,PropB 已从AppStorage成功删除
733```
734
735### Keys<sup>(deprecated)</sup>
736
737static Keys(): IterableIterator&lt;string&gt;
738
739返回[AppStorage](../../../ui/state-management/arkts-appstorage.md)中所有的属性名。
740
741> **说明:**<br/>
742> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[keys10+](#keys10)替代。
743
744**系统能力:** SystemCapability.ArkUI.ArkUI.Full
745
746**返回值:**
747
748| 类型                             | 说明                 |
749| ------------------------------ | ------------------ |
750| IterableIterator&lt;string&gt; | AppStorage中所有的属性名。 |
751
752**示例:**
753```ts
754AppStorage.SetOrCreate('PropB', 48);
755let keys: IterableIterator<string> = AppStorage.Keys();
756```
757
758
759### staticClear<sup>(deprecated)</sup>
760
761static staticClear(): boolean
762
763删除所有的属性。
764
765> **说明:**<br/>
766> 从API version 7 开始支持,从API version 9 开始废弃,推荐使用[clear10+](#clear10)替代。
767
768**系统能力:** SystemCapability.ArkUI.ArkUI.Full
769
770**返回值:**
771
772| 类型      | 说明                                |
773| ------- | --------------------------------- |
774| boolean | 删除所有的属性。如果删除成功,返回true;如果当前有状态变量依旧引用此属性,返回false。 |
775
776**示例:**
777```ts
778let simple = AppStorage.staticClear();
779```
780
781
782### Clear<sup>(deprecated)</sup>
783
784static Clear(): boolean
785
786删除[AppStorage](../../../ui/state-management/arkts-appstorage.md)中所有属性。删除所有属性的前提是,AppStorage已经没有任何订阅者。如果有订阅者,Clear将不会生效并返回false。如果没有订阅者且删除成功则返回true。
787
788订阅者的含义参考[delete](#delete10)。
789
790> **说明:**<br/>
791> 从API version 9 开始支持,从API version 10 开始废弃,推荐使用[clear10+](#clear10)替代。
792
793**系统能力:** SystemCapability.ArkUI.ArkUI.Full
794
795**返回值:**
796
797| 类型    | 说明                                                         |
798| ------- | ------------------------------------------------------------ |
799| boolean | 如果AppStorage中的属性已经没有订阅者则删除成功,返回true。否则返回false。 |
800
801**示例:**
802```typescript
803AppStorage.SetOrCreate('PropA', 47);
804let res: boolean = AppStorage.Clear(); // true,已经没有订阅者
805```
806
807
808### IsMutable<sup>(deprecated)</sup>
809
810static IsMutable(propName: string): boolean
811
812返回[AppStorage](../../../ui/state-management/arkts-appstorage.md)中propName对应的属性是否是可变的。
813
814> **说明:**<br/>
815> 从API version 7 开始支持,从API version 10 开始废弃。
816
817**系统能力:** SystemCapability.ArkUI.ArkUI.Full
818
819**参数:**
820
821| 参数名      | 类型     | 必填   | 说明             |
822| -------- | ------ | ---- | ---------------- |
823| propName | string | 是    | AppStorage中的属性名。 |
824
825**返回值:**
826
827| 类型      | 说明                               |
828| ------- | -------------------------------- |
829| boolean | 返回AppStorage中propName对应的属性是否是可变的。当前该返回值恒为true。 |
830
831**示例:**
832```ts
833AppStorage.SetOrCreate('PropA', 47);
834let res: boolean = AppStorage.IsMutable('simpleProp');
835```
836
837
838### Size<sup>(deprecated)</sup>
839
840static Size(): number
841
842返回[AppStorage](../../../ui/state-management/arkts-appstorage.md)中的属性数量。
843
844> **说明:**<br/>
845> 从API version 7 开始支持,从API version 10 开始废弃,推荐使用[size10+](#size10)替代。
846
847**系统能力:** SystemCapability.ArkUI.ArkUI.Full
848
849**返回值:**
850
851| 类型     | 说明                  |
852| ------ | ------------------- |
853| number | 返回AppStorage中属性的数量。 |
854
855**示例:**
856```ts
857AppStorage.SetOrCreate('PropB', 48);
858let res: number = AppStorage.Size(); // 1
859```
860
861
862## LocalStorage<sup>9+</sup>
863
864
865LocalStorage具体UI使用说明,详见[LocalStorage(页面级UI状态存储)](../../../ui/state-management/arkts-localstorage.md)
866
867**卡片能力:** 从API version 9开始,支持在ArkTS卡片中使用。
868
869**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
870
871**系统能力:** SystemCapability.ArkUI.ArkUI.Full
872
873### constructor<sup>9+</sup>
874
875constructor(initializingProperties?: Object)
876
877创建一个新的[LocalStorage](../../../ui/state-management/arkts-localstorage.md)实例。使用Object.keys(initializingProperties)返回的属性和其数值,初始化LocalStorage实例。
878
879**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
880
881**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
882
883**系统能力:** SystemCapability.ArkUI.ArkUI.Full
884
885**参数:**
886
887| 参数名                    | 类型     | 必填   | 说明                                     |
888| ---------------------- | ------ | ---- | ---------------------------------------- |
889| initializingProperties | Object | 否    | 用initializingProperties包含的属性和数值初始化LocalStorage。initializingProperties不能为undefined。 |
890
891**示例:**
892```ts
893let para: Record<string, number> = { 'PropA': 47 };
894let storage: LocalStorage = new LocalStorage(para);
895```
896
897
898### getShared<sup>(deprecated)</sup>
899
900static getShared(): LocalStorage
901
902获取当前stage共享的[LocalStorage](../../../ui/state-management/arkts-localstorage.md)实例。
903
904> **说明:**
905>
906> 从API version 10开始支持,从API version 18开始废弃,建议使用[UIContext](../arkts-apis-uicontext-uicontext.md)中的[getSharedLocalStorage](../arkts-apis-uicontext-uicontext.md#getsharedlocalstorage12)替代。
907>
908> 从API version 12开始,可以通过使用[UIContext](../arkts-apis-uicontext-uicontext.md)中的[getSharedLocalStorage](../arkts-apis-uicontext-uicontext.md#getsharedlocalstorage12)来明确UI的执行上下文。
909
910**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
911
912**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
913
914**系统能力:** SystemCapability.ArkUI.ArkUI.Full
915
916**模型约束:** 此接口仅可在Stage模型下使用。
917
918**返回值:**
919
920| 类型                             | 说明                |
921| ------------------------------ | ----------------- |
922| [LocalStorage](#localstorage9) | 返回LocalStorage实例。 |
923
924### has<sup>9+</sup>
925
926has(propName: string): boolean
927
928判断propName对应的属性是否在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中存在。
929
930**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
931
932**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
933
934**系统能力:** SystemCapability.ArkUI.ArkUI.Full
935
936**参数:**
937
938| 参数名      | 类型     | 必填   | 说明               |
939| -------- | ------ | ---- | ------------------ |
940| propName | string | 是    | LocalStorage中的属性名。 |
941
942**返回值:**
943
944| 类型    | 说明                                                         |
945| ------- | ------------------------------------------------------------ |
946| boolean | 如果propName对应的属性在LocalStorage中存在,则返回true。不存在则返回false。 |
947
948**示例:**
949```ts
950let para: Record<string, number> = { 'PropA': 47 };
951let storage: LocalStorage = new LocalStorage(para);
952storage.has('PropA'); // true
953```
954
955
956### get<sup>9+</sup>
957
958get&lt;T&gt;(propName: string): T | undefined
959
960获取propName在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中对应的属性值。
961
962**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
963
964**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
965
966**系统能力:** SystemCapability.ArkUI.ArkUI.Full
967
968**参数:**
969
970| 参数名      | 类型     | 必填   | 说明               |
971| -------- | ------ | ---- | ------------------ |
972| propName | string | 是    | LocalStorage中的属性名。 |
973
974**返回值:**
975
976| 类型                     | 说明                                                         |
977| ------------------------ | ------------------------------------------------------------ |
978| T&nbsp;\|&nbsp;undefined | LocalStorage中propName对应的属性值,如果不存在则返回undefined。 |
979
980**示例:**
981```ts
982let para: Record<string, number> = { 'PropA': 47 };
983let storage: LocalStorage = new LocalStorage(para);
984let value: number = storage.get('PropA') as number; // 47
985```
986
987
988### set<sup>9+</sup>
989
990set&lt;T&gt;(propName: string, newValue: T): boolean
991
992在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中设置propName对应属性的值。如果newValue的值和propName对应属性的值相同,即不需要做赋值操作,状态变量不会通知UI刷新propName对应属性的值。从API version 12开始,newValue可以为null或undefined。
993
994> **说明:**
995>
996> 从API version 12开始,LocalStorage支持[Map](../../../ui/state-management/arkts-localstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-localstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-localstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-localstorage.md#localstorage支持联合类型)。
997
998**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
999
1000**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1001
1002**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1003
1004**参数:**
1005
1006| 参数名      | 类型     | 必填   | 说明                    |
1007| -------- | ------ | ---- | ----------------------- |
1008| propName | string | 是    | LocalStorage中的属性名。      |
1009| newValue | T      | 是    | 属性值,从API version 12开始可以为undefined或者null。 |
1010
1011**返回值:**
1012
1013| 类型    | 说明                                                         |
1014| ------- | ------------------------------------------------------------ |
1015| boolean | 如果LocalStorage中不存在propName对应的属性,返回false。设置成功返回true。 |
1016
1017**示例:**
1018
1019```ts
1020let para: Record<string, number> = { 'PropA': 47 };
1021let storage: LocalStorage = new LocalStorage(para);
1022let res: boolean = storage.set('PropA', 47); // true
1023let res1: boolean = storage.set('PropB', 47); // false
1024```
1025
1026
1027### setOrCreate<sup>9+</sup>
1028
1029setOrCreate&lt;T&gt;(propName: string, newValue: T): boolean
1030
1031如果propName已经在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中存在,并且newValue和propName对应属性的值不同,则设置propName对应属性的值为newValue,否则状态变量不会通知UI刷新propName对应属性的值。
1032如果propName不存在,则创建propName属性,值为newValue。setOrCreate只可以创建单个LocalStorage的键值对,如果想创建多个LocalStorage键值对,可以多次调用此方法。从API version 12开始,newValue可以为null或undefined。
1033
1034> **说明:**
1035>
1036> 从API version 12开始,LocalStorage支持[Map](../../../ui/state-management/arkts-localstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-localstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-localstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-localstorage.md#localstorage支持联合类型)。
1037
1038**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1039
1040**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1041
1042**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1043
1044**参数:**
1045
1046| 参数名      | 类型     | 必填   | 说明                    |
1047| -------- | ------ | ---- | ----------------------- |
1048| propName | string | 是    | LocalStorage中的属性名。      |
1049| newValue | T      | 是    | 属性值,从API version 12开始可以为undefined或者null。 |
1050
1051**返回值:**
1052
1053| 类型    | 说明                                                         |
1054| ------- | ------------------------------------------------------------ |
1055| boolean | 如果LocalStorage中存在propName,则更新其值为newValue,返回true。<br/>如果LocalStorage中不存在propName,则创建propName,并初始化其值为newValue,返回true。 |
1056
1057**示例:**
1058
1059```ts
1060let para: Record<string, number> = { 'PropA': 47 };
1061let storage: LocalStorage = new LocalStorage(para);
1062let res: boolean = storage.setOrCreate('PropA', 121); // true
1063let res1: boolean = storage.setOrCreate('PropB', 111); // true
1064let res2: boolean = storage.setOrCreate('PropB', null); // true (API12及之后返回true,API11及之前返回false)
1065```
1066
1067### ref<sup>12+</sup>
1068
1069ref\<T\>(propName: string): AbstractProperty\<T\>&nbsp;|&nbsp;undefined
1070
1071如果给定的propName在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中存在,则返回LocalStorage中propName对应数据的引用。否则,返回undefined。
1072
1073与[link](#link9)的功能基本一致,但不需要手动释放返回的[AbstractProperty](#abstractproperty)类型的变量。
1074
1075**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1076
1077**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1078
1079**参数:**
1080
1081| 参数名   | 类型   | 必填 | 说明                 |
1082| -------- | ------ | ---- | ------------------------ |
1083| propName | string | 是   | LocalStorage中的属性名。 |
1084
1085**返回值:**
1086
1087| 类型                                   | 说明                                                         |
1088| -------------------------------------- | ------------------------------------------------------------ |
1089| [AbstractProperty&lt;T&gt;](#abstractproperty) \| undefined | LocalStorage中propName对应属性的引用,如果LocalStorage中不存在对应的propName,则返回undefined。 |
1090
1091**示例:**
1092
1093```ts
1094let para: Record<string, number> = { 'PropA': 47 };
1095let storage: LocalStorage = new LocalStorage(para);
1096let refToPropA1: AbstractProperty<number> | undefined = storage.ref('PropA');
1097let refToPropA2: AbstractProperty<number> | undefined = storage.ref('PropA'); // refToPropA2.get() == 47
1098refToPropA1?.set(48); // refToPropA1.get() == refToPropA2.get() == 48
1099```
1100
1101### setAndRef<sup>12+</sup>
1102
1103setAndRef&lt;T&gt;(propName: string, defaultValue: T): AbstractProperty&lt;T&gt;
1104
1105与[ref](#ref12-1)接口类似,如果给定的propName在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中存在,则返回LocalStorage中propName对应数据的引用。如果不存在,则使用defaultValue在LocalStorage中创建和初始化propName对应的属性,并返回其引用。defaultValue须为T类型,可以为null或undefined。
1106
1107与[setAndLink](#setandlink9)的功能基本一致,但不需要手动释放返回的[AbstractProperty](#abstractproperty)类型的变量。
1108
1109> **说明:**<br/>
1110> 从API version 12开始,LocalStorage支持[Map](../../../ui/state-management/arkts-localstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-localstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-localstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-localstorage.md#localstorage支持联合类型)。
1111
1112**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1113
1114**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1115
1116**参数:**
1117
1118| 参数名       | 类型   | 必填 | 说明                                                     |
1119| ------------ | ------ | ---- | ------------------------------------------------------------ |
1120| propName     | string | 是   | LocalStorage中的属性名。                                     |
1121| defaultValue | T      | 是   | 当propName在LocalStorage中不存在时,使用defaultValue在LocalStorage中初始化对应的propName,defaultValue可以为null或undefined。 |
1122
1123**返回值:**
1124
1125| 类型                      | 说明                                                         |
1126| ------------------------- | ------------------------------------------------------------ |
1127| [AbstractProperty&lt;T&gt;](#abstractproperty) | AbstractProperty&lt;T&gt;的实例,为LocalStorage中propName对应属性的引用。 |
1128
1129**示例:**
1130
1131```ts
1132let para: Record<string, number> = { 'PropA': 47 };
1133let storage: LocalStorage = new LocalStorage(para);
1134let ref1: AbstractProperty<number> = storage.setAndRef('PropB', 49); // 用默认值49创建PropB
1135let ref2: AbstractProperty<number> = storage.setAndRef('PropA', 50); // PropA已存在,值为47
1136```
1137
1138### link<sup>9+</sup>
1139
1140link&lt;T&gt;(propName: string): SubscribedAbstractProperty&lt;T&gt;
1141
1142如果给定的propName在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)实例中存在,则返回与LocalStorage中propName对应属性的双向绑定数据。
1143
1144双向绑定数据的修改会被同步回LocalStorage中,LocalStorage会将变化同步到所有绑定该propName的数据和Component中。
1145
1146如果LocalStorage中不存在propName,则返回undefined。
1147
1148**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1149
1150**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1151
1152**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1153
1154**参数:**
1155
1156| 参数名      | 类型     | 必填   | 说明               |
1157| -------- | ------ | ---- | ------------------ |
1158| propName | string | 是    | LocalStorage中的属性名。 |
1159
1160**返回值:**
1161
1162| 类型                                | 说明                                                         |
1163| ----------------------------------- | ------------------------------------------------------------ |
1164| [SubscribedAbstractProperty&lt;T&gt;](#subscribedabstractproperty) | SubscribedAbstractProperty&lt;T&gt;的实例,与LocalStorage中propName对应属性的双向绑定的数据,如果LocalStorage中不存在对应的propName,则返回undefined。 |
1165
1166**示例:**
1167```ts
1168let para: Record<string, number> = { 'PropA': 47 };
1169let storage: LocalStorage = new LocalStorage(para);
1170let linkToPropA1: SubscribedAbstractProperty<number> = storage.link('PropA');
1171let linkToPropA2: SubscribedAbstractProperty<number> = storage.link('PropA'); // linkToPropA2.get() == 47
1172linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48
1173```
1174
1175
1176### setAndLink<sup>9+</sup>
1177
1178setAndLink&lt;T&gt;(propName: string, defaultValue: T): SubscribedAbstractProperty&lt;T&gt;
1179
1180与[link](#link9)接口类似,如果给定的propName在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在LocalStorage中创建和初始化propName对应的属性,返回其双向绑定数据。defaultValue必须为T类型,从API version 12开始defaultValue可以为null或undefined。
1181
1182> **说明:**
1183>
1184> 从API version 12开始,LocalStorage支持[Map](../../../ui/state-management/arkts-localstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-localstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-localstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-localstorage.md#localstorage支持联合类型)。
1185
1186**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1187
1188**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1189
1190**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1191
1192**参数:**
1193
1194| 参数名       | 类型   | 必填 | 说明                                                     |
1195| ------------ | ------ | ---- | ------------------------------------------------------------ |
1196| propName     | string | 是   | LocalStorage中的属性名。                                     |
1197| defaultValue | T      | 是   | 当propName在LocalStorage中不存在时,使用defaultValue在LocalStorage中初始化对应的propName,从API version 12开始defaultValue可以为null或undefined。 |
1198
1199**返回值:**
1200
1201| 类型                                | 说明                                                         |
1202| ----------------------------------- | ------------------------------------------------------------ |
1203| [SubscribedAbstractProperty&lt;T&gt;](#subscribedabstractproperty) | SubscribedAbstractProperty&lt;T&gt;的实例,与LocalStorage中propName对应属性的双向绑定的数据。 |
1204
1205**示例:**
1206```ts
1207let para: Record<string, number> = { 'PropA': 47 };
1208let storage: LocalStorage = new LocalStorage(para);
1209let link1: SubscribedAbstractProperty<number> = storage.setAndLink('PropB', 49); // 用默认值49创建PropB
1210let link2: SubscribedAbstractProperty<number> = storage.setAndLink('PropA', 50); // PropA已存在,值为47
1211```
1212
1213
1214### prop<sup>9+</sup>
1215
1216prop&lt;S&gt;(propName: string): SubscribedAbstractProperty&lt;S&gt;
1217
1218如果给定的propName在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中存在,则返回与LocalStorage中propName对应属性的单向绑定数据。如果LocalStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回LocalStorage中。
1219
1220**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1221
1222**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1223
1224**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1225
1226**参数:**
1227
1228| 参数名      | 类型     | 必填   | 说明               |
1229| -------- | ------ | ---- | ------------------ |
1230| propName | string | 是    | LocalStorage中的属性名。 |
1231
1232**返回值:**
1233
1234| 类型                                | 说明                                                         |
1235| ----------------------------------- | ------------------------------------------------------------ |
1236| [SubscribedAbstractProperty&lt;S&gt;](#subscribedabstractproperty) | SubscribedAbstractProperty&lt;S&gt;的实例,和LocalStorage中propName对应属性的单向绑定的数据。如果LocalStorage中不存在对应的propName,则返回undefined。 |
1237
1238**示例:**
1239```ts
1240let para: Record<string, number> = { 'PropA': 47 };
1241let storage: LocalStorage = new LocalStorage(para);
1242let prop1: SubscribedAbstractProperty<number> = storage.prop('PropA');
1243let prop2: SubscribedAbstractProperty<number> = storage.prop('PropA');
1244prop1.set(1); // 单向同步:prop1.get()的值为1,prop2.get()的值为47
1245```
1246
1247
1248### setAndProp<sup>9+</sup>
1249
1250setAndProp&lt;S&gt;(propName: string, defaultValue: S): SubscribedAbstractProperty&lt;S&gt;
1251
1252与[prop](#prop9)接口类似。如果propName在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在LocalStorage中创建和初始化propName对应的属性,返回其单向绑定数据。defaultValue必须为S类型,从API version 12开始defaultValue可以为null或undefined。
1253
1254> **说明:**
1255>
1256> 从API version 12开始,LocalStorage支持[Map](../../../ui/state-management/arkts-localstorage.md#装饰map类型变量)、[Set](../../../ui/state-management/arkts-localstorage.md#装饰set类型变量)、[Date类型](../../../ui/state-management/arkts-localstorage.md#装饰date类型变量),支持null、undefined以及[联合类型](../../../ui/state-management/arkts-localstorage.md#localstorage支持联合类型)。
1257
1258**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1259
1260**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1261
1262**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1263
1264**参数:**
1265
1266| 参数名       | 类型   | 必填 | 说明                                                     |
1267| ------------ | ------ | ---- | ------------------------------------------------------------ |
1268| propName     | string | 是   | LocalStorage中的属性名。                                     |
1269| defaultValue | S      | 是   | 当propName在LocalStorage中不存在,使用defaultValue在LocalStorage中初始化对应的propName,从API version 12开始defaultValue可以为null或undefined。 |
1270
1271**返回值:**
1272
1273| 类型                                | 说明                                                         |
1274| ----------------------------------- | ------------------------------------------------------------ |
1275| [SubscribedAbstractProperty&lt;S&gt;](#subscribedabstractproperty) | SubscribedAbstractProperty&lt;S&gt;的实例,和LocalStorage中propName对应属性的单向绑定的数据。 |
1276
1277**示例:**
1278
1279```ts
1280let para: Record<string, number> = { 'PropA': 47 };
1281let storage: LocalStorage = new LocalStorage(para);
1282let prop: SubscribedAbstractProperty<number> = storage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49
1283```
1284
1285
1286### delete<sup>9+</sup>
1287
1288delete(propName: string): boolean
1289
1290在[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中删除propName对应的属性。在LocalStorage中删除属性的前提是该属性已经没有订阅者,如果有订阅者,则返回false。如果没有订阅者则删除成功并返回true。
1291
1292属性的订阅者为:
1293
12941. [\@LocalStorageLink](../../../ui/state-management/arkts-localstorage.md#localstoragelink)、[\@LocalStorageProp](../../../ui/state-management/arkts-localstorage.md#localstorageprop)装饰的变量。
1295
12962. 通过[link](#link9)、[prop](#prop9)、[setAndLink](#setandlink9)、[setAndProp](#setandprop9)接口返回的[SubscribedAbstractProperty](#subscribedabstractproperty)的实例。
1297
1298如果想要删除这些订阅者,可以通过以下方式:
1299
13001. 删除\@LocalStorageLink、\@LocalStorageProp所在的自定义组件。删除自定义组件请参考[自定义组件的删除](../../../ui/state-management/arkts-page-custom-components-lifecycle.md#自定义组件的删除)。
1301
13022. 对link、prop、setAndLink、setAndProp接口返回的SubscribedAbstractProperty的实例调用[aboutToBeDeleted](#abouttobedeleted10)接口。
1303
1304**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1305
1306**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1307
1308**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1309
1310**参数:**
1311
1312| 参数名      | 类型     | 必填   | 说明               |
1313| -------- | ------ | ---- | ------------------ |
1314| propName | string | 是    | LocalStorage中的属性名。 |
1315
1316**返回值:**
1317
1318| 类型    | 说明                                                         |
1319| ------- | ------------------------------------------------------------ |
1320| boolean | 如果LocalStorage中有对应的属性,且该属性已经没有订阅者,则删除成功,返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。 |
1321
1322**示例:**
1323```ts
1324let para: Record<string, number> = { 'PropA': 47 };
1325let storage: LocalStorage = new LocalStorage(para);
1326storage.link<number>('PropA');
1327let res: boolean = storage.delete('PropA'); // false,PropA 还存在订阅者
1328let res1: boolean = storage.delete('PropB'); // false,PropB 不存在于storage中
1329storage.setOrCreate('PropB', 48);
1330let res2: boolean = storage.delete('PropB'); // true,PropB 已从storage成功删除
1331```
1332
1333
1334### keys<sup>9+</sup>
1335
1336keys(): IterableIterator&lt;string&gt;
1337
1338返回[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中所有的属性名。
1339
1340**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1341
1342**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1343
1344**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1345
1346**返回值:**
1347
1348| 类型                             | 说明                   |
1349| ------------------------------ | -------------------- |
1350| IterableIterator&lt;string&gt; | LocalStorage中所有的属性名。 |
1351
1352**示例:**
1353```ts
1354let para: Record<string, number> = { 'PropA': 47 };
1355let storage: LocalStorage = new LocalStorage(para);
1356let keys: IterableIterator<string> = storage.keys();
1357```
1358
1359
1360### size<sup>9+</sup>
1361
1362size(): number
1363
1364返回[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中的属性数量。
1365
1366**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1367
1368**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1369
1370**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1371
1372**返回值:**
1373
1374| 类型   | 说明                         |
1375| ------ | ---------------------------- |
1376| number | LocalStorage中属性的数量。 |
1377
1378**示例:**
1379```ts
1380let para: Record<string, number> = { 'PropA': 47 };
1381let storage: LocalStorage = new LocalStorage(para);
1382let res: number = storage.size(); // 1
1383```
1384
1385
1386### clear<sup>9+</sup>
1387
1388clear(): boolean
1389
1390删除[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中所有的属性。删除所有属性的前提是已经没有任何订阅者。如果有订阅者,clear不会生效并返回false。如果没有订阅者则删除成功并返回true。
1391
1392订阅者的含义参考[delete](#delete9)。
1393
1394**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1395
1396**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1397
1398**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1399
1400**返回值:**
1401
1402
1403| 类型    | 说明                                                         |
1404| ------- | ------------------------------------------------------------ |
1405| boolean | 如果LocalStorage中的属性已经没有任何订阅者,则删除成功,并返回true。否则返回false。 |
1406
1407
1408**示例:**
1409```ts
1410let para: Record<string, number> = { 'PropA': 47 };
1411let storage: LocalStorage = new LocalStorage(para);
1412let res: boolean = storage.clear(); // true,已经没有订阅者
1413```
1414
1415
1416### GetShared<sup>(deprecated)</sup>
1417
1418static GetShared(): LocalStorage
1419
1420获取当前stage共享的[LocalStorage](../../../ui/state-management/arkts-localstorage.md)实例。
1421
1422> **说明:**
1423>
1424> 从API version 10开始废弃,建议使用[UIContext](../arkts-apis-uicontext-uicontext.md)中的[getSharedLocalStorage](../arkts-apis-uicontext-uicontext.md#getsharedlocalstorage12)替代。
1425
1426**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1427
1428**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1429
1430**模型约束:** 此接口仅可在Stage模型下使用。
1431
1432**返回值:**
1433
1434| 类型                             | 说明                |
1435| ------------------------------ | ----------------- |
1436| [LocalStorage](#localstorage9) | 返回LocalStorage实例。 |
1437
1438**示例:**
1439```ts
1440let storage: LocalStorage = LocalStorage.GetShared();
1441```
1442
1443## AbstractProperty
1444
1445**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1446
1447**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1448
1449### get<sup>12+</sup>
1450
1451get(): T
1452
1453读取[AppStorage](../../../ui/state-management/arkts-appstorage.md)/[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中所引用属性的数据。
1454
1455**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1456
1457**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1458
1459**返回值:**
1460
1461| 类型 | 说明                                        |
1462| ---- | ------------------------------------------- |
1463| T    | AppStorage/LocalStorage中所引用属性的数据。 |
1464
1465**示例:**
1466
1467```ts
1468AppStorage.setOrCreate('PropA', 47);
1469let ref1: AbstractProperty<number> | undefined = AppStorage.ref('PropA');
1470ref1?.get(); //  ref1.get()=47
1471```
1472
1473
1474### set<sup>12+</sup>
1475
1476set(newValue: T): void
1477
1478更新[AppStorage](../../../ui/state-management/arkts-appstorage.md)/[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中所引用属性的数据,newValue必须是T类型,可以为null或undefined。
1479
1480> **说明:**<br/>
1481>
1482> 从API version 12开始,AppStorage/LocalStorage支持Map、Set、Date类型,支持null、undefined以及联合类型。
1483
1484**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1485
1486**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1487
1488
1489**参数:**
1490
1491
1492| 参数名   | 类型 | 必填 | 说明                              |
1493| -------- | ---- | ---- | ------------------------------------- |
1494| newValue | T    | 是   | 要更新的数据,可以为null或undefined。 |
1495
1496
1497**示例:**
1498
1499```ts
1500AppStorage.setOrCreate('PropA', 47);
1501let ref1: AbstractProperty<number> | undefined = AppStorage.ref('PropA');
1502ref1?.set(1); //  ref1.get()=1
1503let a: Map<string, number> = new Map([['1', 0]]);
1504let ref2 = AppStorage.setAndRef('MapA', a);
1505ref2.set(a);
1506let b: Set<string> = new Set('1');
1507let ref3 = AppStorage.setAndRef('SetB', b);
1508ref3.set(b);
1509let c: Date = new Date('2024');
1510let ref4 = AppStorage.setAndRef('DateC', c);
1511ref4.set(c);
1512ref2.set(null);
1513ref3.set(undefined);
1514```
1515
1516### info<sup>12+</sup>
1517
1518info(): string
1519
1520读取[AppStorage](../../../ui/state-management/arkts-appstorage.md)/[LocalStorage](../../../ui/state-management/arkts-localstorage.md)中所引用属性的属性名。
1521
1522**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1523
1524**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1525
1526**返回值:**
1527
1528| 类型   | 说明                                          |
1529| ------ | --------------------------------------------- |
1530| string | AppStorage/LocalStorage中所引用属性的属性名。 |
1531
1532**示例:**
1533
1534```ts
1535AppStorage.setOrCreate('PropA', 47);
1536let ref1: AbstractProperty<number> | undefined = AppStorage.ref('PropA');
1537ref1?.info(); //  ref1.info()='PropA'
1538```
1539
1540## SubscribedAbstractProperty
1541
1542**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1543
1544**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1545
1546**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1547
1548### get<sup>9+</sup>
1549
1550abstract get(): T
1551
1552读取从[AppStorage](../../../ui/state-management/arkts-appstorage.md)/[LocalStorage](../../../ui/state-management/arkts-localstorage.md)同步属性的数据。
1553
1554**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1555
1556**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1557
1558**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1559
1560**返回值:**
1561
1562| 类型   | 说明                              |
1563| ---- | ------------------------------- |
1564| T    | AppStorage/LocalStorage同步属性的数据。 |
1565
1566**示例:**
1567```ts
1568AppStorage.setOrCreate('PropA', 47);
1569let prop1: SubscribedAbstractProperty<number> = AppStorage.prop('PropA');
1570prop1.get(); //  prop1.get()=47
1571```
1572
1573
1574### set<sup>9+</sup>
1575
1576abstract set(newValue: T): void
1577
1578设置[AppStorage](../../../ui/state-management/arkts-appstorage.md)/[LocalStorage](../../../ui/state-management/arkts-localstorage.md)同步属性的数据,newValue必须是T类型,从API version 12开始可以为null或undefined。
1579
1580> **说明:**
1581>
1582>从API version 12开始,AppStorage/LocalStorage支持Map、Set、Date类型,支持null、undefined以及联合类型。
1583
1584**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
1585
1586**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1587
1588**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1589
1590
1591**参数:**
1592
1593
1594| 参数名   | 类型 | 必填 | 说明                                                  |
1595| -------- | ---- | ---- | --------------------------------------------------------- |
1596| newValue | T    | 是   | 要设置的数据,从API version 12开始可以为null或undefined。 |
1597
1598
1599**示例:**
1600```ts
1601AppStorage.setOrCreate('PropA', 47);
1602let prop1: SubscribedAbstractProperty<number> = AppStorage.prop('PropA');
1603prop1.set(1); //  prop1.get()=1
1604// 从API12开始支持Map、Set、Date类型,支持null、undefined以及联合类型。
1605let a: Map<string, number> = new Map([['1', 0]]);
1606let prop2 = AppStorage.setAndProp('MapA', a);
1607prop2.set(a);
1608let b: Set<string> = new Set('1');
1609let prop3 = AppStorage.setAndProp('SetB', b);
1610prop3.set(b);
1611let c: Date = new Date('2024');
1612let prop4 = AppStorage.setAndProp('DateC', c);
1613prop4.set(c);
1614prop2.set(null);
1615prop3.set(undefined);
1616```
1617
1618### aboutToBeDeleted<sup>10+</sup>
1619
1620abstract aboutToBeDeleted(): void
1621
1622取消[SubscribedAbstractProperty](#subscribedabstractproperty)实例对[AppStorage](../../../ui/state-management/arkts-appstorage.md)/[LocalStorage](../../../ui/state-management/arkts-localstorage.md)的单/双向同步关系,并无效化SubscribedAbstractProperty实例,即当调用aboutToBeDeleted方法之后不能再使用SubscribedAbstractProperty实例调用[set](#set9-1)或[get](#get9-1)方法。
1623
1624**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1625
1626**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1627
1628**示例:**
1629```ts
1630AppStorage.setOrCreate('PropA', 47);
1631let link = AppStorage.setAndLink('PropB', 49); // PropA -> 47, PropB -> 49
1632link.aboutToBeDeleted();
1633```
1634
1635### info<sup>10+</sup>
1636
1637info(): string
1638
1639返回属性名称。
1640
1641**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1642
1643**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1644
1645**返回值:**
1646
1647|类型   |说明     |
1648|---------|-------------|
1649|string    |属性名称。    |
1650
1651## PersistPropsOptions<sup>10+</sup>
1652
1653用于指定持久化属性及其默认值的键值对对象,作为[persistProps](#persistprops10)参数传入。
1654
1655**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1656
1657**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1658
1659| 名称       | 类型                                  | 必填 | 说明                                                     |
1660| ------------ | ------------------------------------- | ---- | ------------------------------------------------------------ |
1661| key          | string                                | 是   | 属性名。                                                     |
1662| defaultValue | number \| string \| boolean \| Object | 是   | 在PersistentStorage和AppStorage未查询到时,则使用默认值初始化它。从API version 12开始,defaultValue允许为null或undefined。 |
1663
1664## PersistentStorage
1665
1666**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1667
1668**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1669
1670PersistentStorage具体UI使用说明,详见[PersistentStorage(持久化存储UI状态)](../../../ui/state-management/arkts-persiststorage.md)
1671
1672> **说明:**<br/>
1673> 从API version 12开始,PersistentStorage支持null、undefined。
1674
1675### persistProp<sup>10+</sup>
1676
1677static persistProp&lt;T&gt;(key: string, defaultValue: T): void
1678
1679将[AppStorage](../../../ui/state-management/arkts-appstorage.md)中key对应的属性持久化到文件中。该接口的调用通常在访问AppStorage之前。
1680
1681确定属性的类型和值的顺序如下:
1682
16831. 如果[PersistentStorage](../../../ui/state-management/arkts-persiststorage.md)文件中存在key对应的属性,在AppStorage中创建对应的propName,并用在PersistentStorage中找到的key的属性初始化。
1684
16852. 如果PersistentStorage文件中没有查询到key对应的属性,则在AppStorage中查找key对应的属性。如果找到key对应的属性,则将该属性持久化。
1686
16873. 如果AppStorage中也没查找到key对应的属性,则在AppStorage中创建key对应的属性。用defaultValue初始化其值,并将该属性持久化。
1688
1689根据上述的初始化流程,如果AppStorage中有该属性,则会使用其值,覆盖掉PersistentStorage文件中的值。由于AppStorage是内存内数据,该行为会导致数据丧失持久化能力。
1690
1691**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1692
1693**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1694
1695**参数:**
1696
1697| 参数名       | 类型   | 必填 | 说明                                                     |
1698| ------------ | ------ | ---- | ------------------------------------------------------------ |
1699| key          | string | 是   | 属性名。                                                     |
1700| defaultValue | T      | 是   | 在PersistentStorage和AppStorage中未查询到时,则使用默认值进行初始化。从API version 12开始允许为null或undefined。 |
1701
1702
1703**示例:**
1704
1705
1706persistProp具体使用,见[从AppStorage中访问PersistentStorage初始化的属性](../../../ui/state-management/arkts-persiststorage.md#从appstorage中访问persistentstorage初始化的属性)
1707
1708
1709### deleteProp<sup>10+</sup>
1710
1711static deleteProp(key: string): void
1712
1713[persistProp](#persistprop10)的逆向操作。将key对应的属性从PersistentStorage中删除,后续[AppStorage](../../../ui/state-management/arkts-appstorage.md)的操作,对[PersistentStorage](../../../ui/state-management/arkts-persiststorage.md)不会再有影响。该操作会将对应的key从持久化文件中删除,如果希望再次持久化,可以再次调用[persistProp](#persistprop10)接口。
1714
1715**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1716
1717**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1718
1719**参数:**
1720
1721| 参数名  | 类型     | 必填   | 说明                    |
1722| ---- | ------ | ---- | ----------------------- |
1723| key  | string | 是    | PersistentStorage中的属性名。 |
1724
1725**示例:**
1726```ts
1727PersistentStorage.deleteProp('highScore');
1728```
1729
1730
1731### persistProps<sup>10+</sup>
1732
1733static persistProps(props: PersistPropsOptions[]): void
1734
1735行为和[persistProp](#persistprop10)类似,不同在于可以一次性持久化多个数据,适合在应用启动的时候初始化。
1736
1737**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1738
1739**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1740
1741**参数:**
1742
1743| 参数名        | 类型                                       | 必填   | 说明                                     |
1744| ---------- | ---------------------------------------- | ---- | ---------------------------------------- |
1745| props | [PersistPropsOptions](#persistpropsoptions10)[] | 是 | 持久化数组。 |
1746
1747**示例:**
1748```ts
1749PersistentStorage.persistProps([{ key: 'highScore', defaultValue: '0' }, { key: 'wightScore', defaultValue: '1' }]);
1750```
1751
1752
1753### keys<sup>10+</sup>
1754
1755static keys(): Array&lt;string&gt;
1756
1757返回所有持久化属性的属性名的数组。
1758
1759**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1760
1761**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1762
1763**返回值:**
1764
1765| 类型                | 说明                               |
1766| ------------------- | ---------------------------------- |
1767| Array&lt;string&gt; | 返回所有持久化属性的属性名的数组。 |
1768
1769**示例:**
1770```ts
1771let keys: Array<string> = PersistentStorage.keys();
1772```
1773
1774
1775### PersistProp<sup>(deprecated)</sup>
1776
1777static PersistProp&lt;T&gt;(key: string, defaultValue: T): void
1778
1779将[AppStorage](../../../ui/state-management/arkts-appstorage.md)中key对应的属性持久化到文件中。该接口的调用通常在访问AppStorage之前。
1780
1781确定属性的类型和值的顺序如下:
1782
17831. 如果[PersistentStorage](../../../ui/state-management/arkts-persiststorage.md)文件中存在key对应的属性,在AppStorage中创建对应的propName,并用在PersistentStorage中找到的key的属性初始化。
1784
17852. 如果PersistentStorage文件中没有查询到key对应的属性,则在AppStorage中查找key对应的属性。如果找到key对应的属性,则将该属性持久化。
1786
17873. 如果AppStorage也没查找到key对应的属性,则在AppStorage中创建key对应的属性。用defaultValue初始化其值,并将该属性持久化。
1788
1789根据上述的初始化流程,如果AppStorage中有该属性,则会使用其值,覆盖掉PersistentStorage文件中的值。由于AppStorage是内存内数据,该行为会导致数据丧失持久化能力。
1790
1791
1792> **说明:**<br/>
1793> 从API version 10开始废弃,推荐使用[persistProp10+](#persistprop10)替代。
1794
1795**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1796
1797**参数:**
1798
1799| 参数名       | 类型   | 必填 | 说明                                                     |
1800| ------------ | ------ | ---- | ------------------------------------------------------------ |
1801| key          | string | 是   | 属性名。                                                     |
1802| defaultValue | T      | 是   | 在PersistentStorage和AppStorage中未查询到时,则使用默认值进行初始化。不允许为null或undefined。 |
1803
1804
1805**示例:**
1806
1807
1808```ts
1809PersistentStorage.PersistProp('highScore', '0');
1810```
1811
1812
1813### DeleteProp<sup>(deprecated)</sup>
1814
1815static DeleteProp(key: string): void
1816
1817[PersistProp](#persistpropdeprecated)的逆向操作。将key对应的属性从[PersistentStorage](../../../ui/state-management/arkts-persiststorage.md)中删除,后续[AppStorage](../../../ui/state-management/arkts-appstorage.md)的操作,对PersistentStorage不会再有影响。
1818
1819
1820> **说明:**<br/>
1821> 从API version 10开始废弃,推荐使用[deleteProp10+](#deleteprop10)替代。
1822
1823**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1824
1825**参数:**
1826
1827| 参数名  | 类型     | 必填   | 说明                    |
1828| ---- | ------ | ---- | ----------------------- |
1829| key  | string | 是    | PersistentStorage中的属性名。 |
1830
1831**示例:**
1832```ts
1833PersistentStorage.DeleteProp('highScore');
1834```
1835
1836
1837### PersistProps<sup>(deprecated)</sup>
1838
1839static PersistProps(properties: {key: string; defaultValue: any;}[]): void
1840
1841行为和[PersistProp](#persistpropdeprecated)类似,不同在于可以一次性持久化多个数据,适合在应用启动的时候初始化。
1842
1843> **说明:**<br/>
1844> 从API version 10开始废弃,推荐使用[persistProps10+](#persistprops10)替代。
1845
1846**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1847
1848**参数:**
1849
1850| 参数名     | 类型                               | 必填 | 说明                                                     |
1851| ---------- | ---------------------------------- | ---- | ------------------------------------------------------------ |
1852| properties | {key: string; defaultValue: any}[] | 是   | 持久化数组,启动key为属性名,defaultValue为默认值。规则同PersistProp。 |
1853
1854**示例:**
1855
1856```ts
1857PersistentStorage.PersistProps([{ key: 'highScore', defaultValue: '0' }, { key: 'wightScore', defaultValue: '1' }]);
1858```
1859
1860### Keys<sup>(deprecated)</sup>
1861
1862static Keys(): Array&lt;string&gt;
1863
1864返回所有持久化属性的属性名的数组。
1865
1866> **说明:**<br/>
1867> 从API version 10开始废弃,推荐使用[keys10+](#keys10-1)替代。
1868
1869**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1870
1871**返回值:**
1872
1873| 类型                | 说明                               |
1874| ------------------- | ---------------------------------- |
1875| Array&lt;string&gt; | 返回所有持久化属性的属性名的数组。 |
1876
1877**示例:**
1878```ts
1879let keys: Array<string> = PersistentStorage.Keys();
1880```
1881## EnvPropsOptions<sup>10+</sup>
1882
1883用于指定环境变量名称及其默认值的键值对对象,作为[envProps](#envprops10)参数传入。
1884
1885**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1886
1887**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1888
1889| 名称       | 类型                        | 必填 | 说明                                                     |
1890| ------------ | --------------------------- | ---- | ------------------------------------------------------------ |
1891| key          | string                      | 是   | 环境变量名称,支持的范围详见[内置环境变量说明](#内置环境变量说明)。 |
1892| defaultValue | number \| string \| boolean | 是   | 查询不到环境变量key,则使用defaultValue作为默认值存入AppStorage中。 |
1893
1894## Environment
1895
1896Environment具体使用说明,详见[Environment(设备环境查询)](../../../ui/state-management/arkts-environment.md)
1897
1898**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1899
1900**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1901
1902### envProp<sup>10+</sup>
1903
1904static envProp&lt;S&gt;(key: string, value: S): boolean
1905
1906将[Environment](../../../ui/state-management/arkts-environment.md)的内置环境变量key存入[AppStorage](../../../ui/state-management/arkts-appstorage.md)中。如果系统中未查询到Environment环境变量key的值,则使用默认值value,存入成功,返回true。如果AppStorage中已经有对应的key,则返回false。
1907
1908所以建议在程序启动的时候调用该接口。
1909
1910在没有调用envProp的情况下,就使用AppStorage读取环境变量是错误的。
1911
1912**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1913
1914**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1915
1916**参数:**
1917
1918| 参数名 | 类型   | 必填 | 说明                                                     |
1919| ------ | ------ | ---- | ------------------------------------------------------------ |
1920| key    | string | 是   | 环境变量名称,支持的范围详见[内置环境变量说明](#内置环境变量说明)。 |
1921| value  | S      | 是   | 查询不到环境变量key时,则使用value作为默认值存入AppStorage中。 |
1922
1923**返回值:**
1924
1925| 类型    | 说明                                                         |
1926| ------- | ------------------------------------------------------------ |
1927| boolean | 如果key对应的属性在AppStorage中存在,则返回false。不存在则在AppStorage中用value作为默认值创建key对应的属性,返回true。 |
1928
1929**示例:**
1930
1931envProp具体使用,详见[从UI中访问Environment参数](../../../ui/state-management/arkts-environment.md#从ui中访问environment参数)。
1932
1933
1934### envProps<sup>10+</sup>
1935
1936static envProps(props: EnvPropsOptions[]): void
1937
1938和[envProp](#envprop10)类似,不同点在于参数为数组,可以一次性初始化多个数据。建议在应用启动时调用,将系统环境变量批量存入[AppStorage](../../../ui/state-management/arkts-appstorage.md)中。
1939
1940**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1941
1942**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1943
1944**参数:**
1945
1946| 参数名 | 类型                                          | 必填 | 说明                             |
1947| ------ | --------------------------------------------- | ---- | ------------------------------------ |
1948| props  | [EnvPropsOptions](#envpropsoptions10)[] | 是   | 系统环境变量和默认值的键值对的数组。 |
1949
1950**示例:**
1951```ts
1952Environment.envProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, {
1953  key: 'languageCode',
1954  defaultValue: 'en'
1955}, { key: 'prop', defaultValue: 'hhhh' }]);
1956```
1957
1958
1959### keys<sup>10+</sup>
1960
1961static keys(): Array&lt;string&gt;
1962
1963返回环境变量的属性key的数组。
1964
1965**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1966
1967**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1968
1969**返回值:**
1970
1971| 类型                  | 说明          |
1972| ------------------- | ----------- |
1973| Array&lt;string&gt; | 返回关联的系统项数组。 |
1974
1975**示例:**
1976```ts
1977Environment.envProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, {
1978  key: 'languageCode',
1979  defaultValue: 'en'
1980}, { key: 'prop', defaultValue: 'hhhh' }]);
1981
1982let keys: Array<string> = Environment.keys(); // keys 包含 accessibilityEnabled,languageCode,prop
1983```
1984
1985
1986### EnvProp<sup>(deprecated)</sup>
1987
1988static EnvProp&lt;S&gt;(key: string, value: S): boolean
1989
1990将[Environment](../../../ui/state-management/arkts-environment.md)的内置环境变量key存入[AppStorage](../../../ui/state-management/arkts-appstorage.md)中。如果系统中未查询到Environment环境变量key的值,则使用默认值value,存入成功,返回true。如果AppStorage中已经有对应的key,则返回false。
1991
1992所以建议在程序启动的时候调用该接口。
1993
1994在没有调用EnvProp的情况下,就使用AppStorage读取环境变量是错误的。
1995
1996> **说明:**<br/>
1997> 从API version 10开始废弃,推荐使用[envProp10+](#envprop10)替代。
1998
1999**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2000
2001**参数:**
2002
2003| 参数名 | 类型   | 必填 | 说明                                                     |
2004| ------ | ------ | ---- | ------------------------------------------------------------ |
2005| key    | string | 是   | 环境变量名称,支持的范围详见[内置环境变量说明](#内置环境变量说明)。 |
2006| value  | S      | 是   | 查询不到环境变量key,则使用value作为默认值存入AppStorage中。 |
2007
2008**返回值:**
2009
2010| 类型    | 说明                                                         |
2011| ------- | ------------------------------------------------------------ |
2012| boolean | 如果key对应的属性在AppStorage中存在,则返回false。不存在则在AppStorage中用value作为默认值创建key对应的属性,返回true。 |
2013
2014**示例:**
2015
2016
2017```ts
2018Environment.EnvProp('accessibilityEnabled', 'default');
2019```
2020
2021
2022### EnvProps<sup>(deprecated)</sup>
2023
2024static EnvProps(props: {key: string; defaultValue: any;}[]): void
2025
2026和[EnvProp](#envpropdeprecated)类似,不同点在于参数为数组,可以一次性初始化多个数据。建议在应用启动时调用,将系统环境变量批量存入[AppStorage](../../../ui/state-management/arkts-appstorage.md)中。
2027
2028> **说明:**<br/>
2029> 从API version 10开始废弃,推荐使用[envProps10+](#envprops10)替代。
2030
2031**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2032
2033**参数:**
2034
2035| 参数名 | 类型                                              | 必填 | 说明                             |
2036| ------ | ------------------------------------------------- | ---- | ------------------------------------ |
2037| props  | {key:&nbsp;string; &nbsp;defaultValue:&nbsp;any}[] | 是   | 系统环境变量和默认值的键值对的数组。 |
2038
2039**示例:**
2040```ts
2041Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, {
2042  key: 'languageCode',
2043  defaultValue: 'en'
2044}, { key: 'prop', defaultValue: 'hhhh' }]);
2045```
2046
2047
2048### Keys<sup>(deprecated)</sup>
2049
2050static Keys(): Array&lt;string&gt;
2051
2052返回环境变量的属性key的数组。
2053
2054> **说明:**<br/>
2055> 从API version 10开始废弃,推荐使用[keys10+](#keys10-2)替代。
2056
2057**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2058
2059**返回值:**
2060
2061| 类型                  | 说明          |
2062| ------------------- | ----------- |
2063| Array&lt;string&gt; | 返回关联的系统项数组。 |
2064
2065**示例:**
2066
2067```ts
2068Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, {
2069  key: 'languageCode',
2070  defaultValue: 'en'
2071}, { key: 'prop', defaultValue: 'hhhh' }]);
2072
2073let keys: Array<string> = Environment.Keys(); // keys 包含 accessibilityEnabled,languageCode,prop
2074```
2075
2076
2077## 内置环境变量说明
2078
2079| key                  | 类型            | 说明                                                         |
2080| -------------------- | --------------- | ------------------------------------------------------------ |
2081| accessibilityEnabled | string          | 无障碍屏幕朗读是否启用。当无法获取环境变量中的accessibilityEnabled的值时,将通过envProp、envProps等接口传入的开发者指定的默认值添加到AppStorage中。 |
2082| colorMode            | [ColorMode](./ts-state-management-environment-variables.md#colormode)       | 深浅色模式,可选值为:<br/>-&nbsp;ColorMode.LIGHT:浅色模式;<br/>-&nbsp;ColorMode.DARK:深色模式。 |
2083| fontScale            | number          | 字体大小比例。                                               |
2084| fontWeightScale      | number          | 字重比例。                                                   |
2085| layoutDirection      | [LayoutDirection](./ts-state-management-environment-variables.md#layoutdirection) | 布局方向类型,可选值为:<br/>-&nbsp;LayoutDirection.LTR:从左到右;<br/>-&nbsp;LayoutDirection.RTL:从右到左。<br/>-&nbsp;Auto:跟随系统。 |
2086| languageCode         | string          | 当前系统语言,小写字母,例如zh。                             |