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