ui-ts-local_storage.md 13.2 KB
Newer Older
J
jiangbo 已提交
1
# LocalStorage
J
jiangbo 已提交
2

J
jiangbo 已提交
3
   ![icon-note.gif](https://gitee.com/BoJiang4702/docs/raw/master/zh-cn/application-dev/reference/arkui-ts/public_sys-resources/icon-note.gif) **说明:** 该组件从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 
J
jiangbo 已提交
4

J
jiangbo 已提交
5
LocalStorage是应用程序中的存储单元,它的生命周期跟随其关联的Ability。且LocalStorage为应用程序范围内的可变状态属性和非可变状态属性提供存储,可变状态属性和非可变状态属性是构建应用程序UI的一部分。如一个Ability的UI。
J
jiangbo 已提交
6

J
jiangbo 已提交
7
应用层:一个应用程序可以创建多个LocalStorage实例,应用程序的每一个Ability对应一个LocalStorage实例。
J
jiangbo 已提交
8

J
jiangbo 已提交
9
Ability: 一个应用程序可以拥有多个Ability,一个Ability中的所有子组件最多可以分配一个LocalStorage实例。并且,Ability中的所有子组件都将继承对此LocalStorage实例存储对象的访问权。 
J
jiangbo 已提交
10

J
jiangbo 已提交
11
一个组件最多可以访问一个LocalStorage实例,一个LocalStorage对象可以分配给多个组件。
J
jiangbo 已提交
12

J
jiangbo 已提交
13
## @LocalStorageLink装饰器
J
jiangbo 已提交
14

J
jiangbo 已提交
15
组件通过使用@LocalStorageLink(key)装饰的状态变量,key值为LocalStorage中的属性键值,与LocalStorage建立双向数据绑定,当创建包含@LocalStorageLink的状态变量的组件时,该状态变量的值将会使用LocalStorage中的值进行初始化。如果LocalStorage中未定义初始值,将使用@LocalStorageLink定义的初始值。在UI组件中对@LocalStorageLink的状态变量所做的更改将同步到LocalStorage中,并从LocalStorage同步到Ability下的组件中。
J
jiangbo 已提交
16

J
jiangbo 已提交
17
## @LocalStorageProp装饰器
J
jiangbo 已提交
18

J
jiangbo 已提交
19
组件通过使用LocalStorageProp(key)装饰的状态变量,key值为LocalStorage中的属性键值,与LocalStorage建立单向数据绑定,当创建包含@LocalStorageProp的状态变量的组件时,该状态变量的值将使用LocalStorage中的值进行初始化。LocalStorage中的属性值的更改会导致当前Ability下的所有UI组件进行状态更新。
J
jiangbo 已提交
20

J
jiangbo 已提交
21
​    ![icon-note.gif](https://gitee.com/BoJiang4702/docs/raw/master/zh-cn/application-dev/reference/arkui-ts/public_sys-resources/icon-note.gif) **说明:** 创建LocalStorage实例时没有给LocalStorage实例默认值时,可以使用组件内@LocalStorageLink和@LocalStorageProp的默认值,如果定义时给定了默认值,那么不会再使用@LocalStorageLink和@LocalStorageProp的默认值。
J
jiangbo 已提交
22

J
jiangbo 已提交
23
## LocalStorage接口
J
jiangbo 已提交
24

J
jiangbo 已提交
25
### Constructor  
J
jiangbo 已提交
26

J
jiangbo 已提交
27 28
constructor(initializingProperties?: Object)

J
jiangbo 已提交
29
创建一个新的LocalStorage对象,对对象进行初始化。
J
jiangbo 已提交
30

J
jiangbo 已提交
31 32 33 34 35
| 参数名                 | 类型   | 返回值 | 必填 | 默认值 | 参数描述                                                     |
| ---------------------- | ------ | ------ | :--: | ------ | ------------------------------------------------------------ |
| initializingProperties | Object | N/A    |  否  | -      | object.keys(obj)返回的所有对象属性及其值都将添加到LocalStorage。 |


J
jiangbo 已提交
36

J
jiangbo 已提交
37
### Has
J
jiangbo 已提交
38

J
jiangbo 已提交
39 40 41 42
has(propName: string): boolean

判断属性值是否存在。

J
jiangbo 已提交
43
**参数:**
J
jiangbo 已提交
44 45 46 47 48

| 参数名   | 类型   | 必填 | 默认值 | 参数描述       |
| -------- | ------ | :--: | ------ | -------------- |
| propName | string |  是  | -      | 属性的属性值。 |

J
jiangbo 已提交
49
**返回值:**
J
jiangbo 已提交
50

J
jiangbo 已提交
51 52 53
| 类型    | 描述                                                         |
| ------- | ------------------------------------------------------------ |
| boolean | 返回判断后属性值是否存在,如果存在,返回true,反之则为false。 |
J
jiangbo 已提交
54 55


J
jiangbo 已提交
56 57 58

### Get

J
jiangbo 已提交
59 60 61 62
get<T>(propName: string): T

获取对应key值的value。

J
jiangbo 已提交
63
**参数:**
J
jiangbo 已提交
64

J
jiangbo 已提交
65 66 67
| 参数名   | 类型   | 必填 | 默认值 | 参数描述            |
| -------- | ------ | :--: | ------ | ------------------- |
| propName | string |  是  | -      | 要获取对应的key值。 |
J
jiangbo 已提交
68

J
jiangbo 已提交
69
**返回值:**
J
jiangbo 已提交
70

J
jiangbo 已提交
71 72 73
| 类型           | 描述                                                  |
| -------------- | ----------------------------------------------------- |
| T \| undefined | 当对应的keyvalue存在时,返回值。不存在返回undefined。 |
J
jiangbo 已提交
74

J
jiangbo 已提交
75 76


J
jiangbo 已提交
77 78
### Set

J
jiangbo 已提交
79 80
 set<T>(propName: string, newValue: T): boolean

J
jiangbo 已提交
81
存储对象值。
J
jiangbo 已提交
82

J
jiangbo 已提交
83
**参数:**
J
jiangbo 已提交
84 85 86 87 88 89

| 参数名   | 类型   | 必填 | 默认值 | 参数描述          |
| -------- | ------ | :--: | ------ | ----------------- |
| propName | string |  是  | -      | 要设置的key值。   |
| newValue | T      |  是  | -      | 要设置的value值。 |

J
jiangbo 已提交
90
**返回值:**
J
jiangbo 已提交
91 92 93 94

| 类型    | 描述                                                  |
| ------- | ----------------------------------------------------- |
| boolean | 如果存在key值,设置value值并返回true,否则返回false。 |
J
jiangbo 已提交
95

J
jiangbo 已提交
96 97


J
jiangbo 已提交
98 99
### SetOrCreate

J
jiangbo 已提交
100 101
 setOrCreate<T>(propName: string, newValue: T): boolean

J
jiangbo 已提交
102
创建或更新setOrCreate内部的值。
J
jiangbo 已提交
103

J
jiangbo 已提交
104
**参数:**
J
jiangbo 已提交
105 106 107 108 109 110

| 参数名   | 类型   | 必填 | 默认值 | 参数描述                    |
| -------- | ------ | :--: | ------ | --------------------------- |
| propName | string |  是  | -      | 传入要更新或者创建的key值。 |
| newValue | T      |  是  | -      | 传入要更新或创建的value值。 |

J
jiangbo 已提交
111
**返回值:**
J
jiangbo 已提交
112 113 114

| 类型    | 描述                                                         |
| ------- | ------------------------------------------------------------ |
J
jiangbo 已提交
115
| boolean | 如果已存在与给定键名字相同的属性,更新其值且返回true。如果不存在具有给定名称的属性,在LocalStorage中创建具有给定默认值的新属性,默认值必须是T类型。不允许undefined 或 null 返回true。 |
J
jiangbo 已提交
116

J
jiangbo 已提交
117 118


J
jiangbo 已提交
119 120
### Link

J
jiangbo 已提交
121 122 123 124
 link<T>(propName: string, linkUser?: T, subscribersName?: string): T

与localStorage双向数据绑定。

J
jiangbo 已提交
125
**参数:**
J
jiangbo 已提交
126

J
jiangbo 已提交
127 128 129 130 131
| 参数名          | 类型   | 必填 | 默认值 | 参数描述               |
| --------------- | ------ | :--: | ------ | ---------------------- |
| propName        | string |  是  | -      | 要双向绑定的属性名称。 |
| linkUser        | T      |  否  | -      | 无                     |
| subscribersName | string |  否  | -      | 无                     |
J
jiangbo 已提交
132

J
jiangbo 已提交
133
**返回值:**
J
jiangbo 已提交
134 135 136 137

| 类型 | 描述                                                         |
| ---- | ------------------------------------------------------------ |
| T    | 如果存在具有给定键的属性,返回到此属性的双向绑定,该双向绑定意味着变量或者组件对数据的更改将同步到LocalStorage,然后通过LocalStorage实例同步到任何变量或组件。如果不存在给定键的属性,返回undefined。 |
J
jiangbo 已提交
138

J
jiangbo 已提交
139 140


J
jiangbo 已提交
141 142
### SetAndLink

J
jiangbo 已提交
143 144 145 146
 setAndLink<T>(propName: string, defaultValue: T, linkUser?: T, subscribersName?: string): T

与link接口类似,双向数据绑定localStorage。

J
jiangbo 已提交
147
**参数:**
J
jiangbo 已提交
148

J
jiangbo 已提交
149 150 151 152 153 154
| 参数名          | 类型   | 必填 | 默认值 | 参数描述                |
| --------------- | ------ | :--: | ------ | ----------------------- |
| propName        | string |  是  | -      | 传入要进行创建的key值。 |
| defaultValue    | T      |  是  | -      | 要进行设置的默认值。    |
| linkUser        | T      |  否  | -      | 无                      |
| subscribersName | string |  否  | -      | 无                      |
J
jiangbo 已提交
155

J
jiangbo 已提交
156
**返回值:**
J
jiangbo 已提交
157

J
jiangbo 已提交
158 159 160
| 类型                                  | 描述                                                         |
| ------------------------------------- | ------------------------------------------------------------ |
| [@Link](ts-component-states-link.md ) | 与Link接口类似,如果当前的key保存于LocalStorage,返回该key值对应的value值。如果该key值未被创建,则创建一个对应的defaultValue的Link返回。 |
J
jiangbo 已提交
161

J
jiangbo 已提交
162 163


J
jiangbo 已提交
164 165
### Prop

J
jiangbo 已提交
166 167 168 169
prop<T>(propName: string, propUser?: T, subscribersName?: string): T

单向属性绑定的一种。更新组件的状态。

J
jiangbo 已提交
170
**参数:**
J
jiangbo 已提交
171

J
jiangbo 已提交
172 173 174 175 176
| 参数名          | 类型   | 必填 | 默认值 | 参数描述                    |
| --------------- | ------ | :--: | ------ | --------------------------- |
| propName        | string |  是  | -      | 传入要单向数据绑定的key值。 |
| propUser        | T      |  否  | -      | 无                          |
| subscribersName | string |  否  | -      | 无                          |
J
jiangbo 已提交
177

J
jiangbo 已提交
178
**返回值:**
J
jiangbo 已提交
179 180 181 182

| 类型  | 描述                                                         |
| ----- | ------------------------------------------------------------ |
| @Prop | 如果存在具有给定键的属性,返回此属性的单向数据绑定。该单向绑定意味着只能通过LocalStorage将属性的更改同步到变量或组件。该方法返回的变量为不可变变量,适用于可变和不可变的状态变量。如果此键的属性不存在则返回undefined。 |
J
jiangbo 已提交
183

J
jiangbo 已提交
184 185


J
jiangbo 已提交
186 187
### SetAndProp

J
jiangbo 已提交
188 189 190 191
setAndProp<T>(propName: string, defaultValue: T, propUser?: T, subscribersName?: string): T

与Prop接口类似,存在localStorage的单向数据绑定prop值

J
jiangbo 已提交
192
**参数:**
J
jiangbo 已提交
193

J
jiangbo 已提交
194 195 196 197 198 199
| 参数名          | 类型   | 必填 | 默认值 | 参数描述                    |
| --------------- | ------ | :--: | ------ | --------------------------- |
| propName        | string |  是  | -      | 要保存的的键值对中的key值。 |
| defaultValue    | S      |  是  | -      | 创建的默认值。              |
| propUser        | T      |  否  | -      | 无                          |
| subscribersName | string |  否  | -      | 无                          |
J
jiangbo 已提交
200

J
jiangbo 已提交
201
**返回值:**
J
jiangbo 已提交
202

J
jiangbo 已提交
203 204 205
| 类型                                 | 描述                                                         |
| ------------------------------------ | ------------------------------------------------------------ |
| [@Prop](ts-component-states-prop.md) | 如果当前的key保存与LocalStorage,返回该key值对应的value值。如果该key值未被创建,则创建一个对应的defaultValue的Prop返回。 |
J
jiangbo 已提交
206

J
jiangbo 已提交
207 208 209 210


### Delete

J
jiangbo 已提交
211 212 213 214
delete(propName: string): boolean

删除key指定的键值对

J
jiangbo 已提交
215
**参数:**
J
jiangbo 已提交
216 217 218 219 220

| 参数名   | 类型   | 必填 | 默认值 | 参数描述              |
| -------- | ------ | :--: | ------ | --------------------- |
| propName | string |  是  | -      | 要删除的属性的key值。 |

J
jiangbo 已提交
221
**返回值:**
J
jiangbo 已提交
222 223 224 225

| 类型    | 描述                                                         |
| ------- | ------------------------------------------------------------ |
| boolean | 删除key指定的键值对,如果存在且删除成功返回true,不存在或删除失败返回false。 |
J
jiangbo 已提交
226

J
jiangbo 已提交
227 228


J
jiangbo 已提交
229 230
### Keys

J
jiangbo 已提交
231 232 233 234
keys(): IterableIterator<string>

查找所有键

J
jiangbo 已提交
235
**返回值:**
J
jiangbo 已提交
236 237 238 239

| 类型          | 描述                         |
| ------------- | ---------------------------- |
| array<string> | 返回包含所有键的字符串数组。 |
J
jiangbo 已提交
240

J
jiangbo 已提交
241 242


J
jiangbo 已提交
243 244
### Size

J
jiangbo 已提交
245 246 247 248
size(): number

存在的键值对的个数

J
jiangbo 已提交
249
**返回值:**
J
jiangbo 已提交
250

J
jiangbo 已提交
251 252 253
| 类型   | 描述               |
| ------ | ------------------ |
| number | 返回键值对的数量。 |
J
jiangbo 已提交
254

J
jiangbo 已提交
255 256


J
jiangbo 已提交
257 258
### Clear

J
jiangbo 已提交
259 260 261 262
clear(): boolean

删除所有的属性

J
jiangbo 已提交
263
**返回值:**
J
jiangbo 已提交
264

J
jiangbo 已提交
265 266 267
| 类型    | 描述                                                         |
| ------- | ------------------------------------------------------------ |
| boolean | 删除所有的属性,如果当前有状态变量依旧引用此属性,返回false。 |
J
jiangbo 已提交
268

J
jiangbo 已提交
269
### 示例1(在一个Ability创建的LocalStorage):
J
jiangbo 已提交
270

J
jiangbo 已提交
271
```javascript
J
jiangbo 已提交
272 273
import Ability from '@ohos.appLication.Ability'
export default class MainAbility extends Ability {    
J
jiangbo 已提交
274 275 276 277 278 279 280
  storage : LocalStorage    
  onCreate(want) {    
    this.storage = new LocalStorage();
    this.storage.setOrCreate("storageSimpleProp",121);    
    console.log("[Demo MainAbility onCreate]");    
    globalThis.abilityWant = want;   
  }  
J
jiangbo 已提交
281
  onDestroy() {    
J
jiangbo 已提交
282
    console.log("[Demo MainAbility onDestroy]")  
J
jiangbo 已提交
283 284
  }    
  onWindowStageCreate(windowStage) {
J
jiangbo 已提交
285
    windowStage.setUIContent(this.context,"pages/index",this.storage)    
J
jiangbo 已提交
286 287
  }    
  onWindowStageDestroy() {
J
jiangbo 已提交
288
    console.log("[Demo] MainAbility onWindoeStageDestroy")   
J
jiangbo 已提交
289 290
  }    
  onForeground() {
J
jiangbo 已提交
291
    console.log("[Demo] MainAbility onForeground")   
J
jiangbo 已提交
292 293
  }    
  onBackground() {
J
jiangbo 已提交
294
    console.log("[Demo] MainAbility onBackground")    
J
jiangbo 已提交
295 296
  }
}
J
jiangbo 已提交
297 298
```

J
jiangbo 已提交
299
@Component组件获取数据:
J
jiangbo 已提交
300 301 302 303 304 305

```
let storage = LocalStorage.GetShared()
@Entry(storage)
@Component
struct LocalStorageComponent {
J
jiangbo 已提交
306 307
  @LocalStorageLink("storageSimpleProp") simpleVarName: number = 0
  build() {
J
jiangbo 已提交
308 309 310
    Column(){
      Text(this.simpleVarName.toString())
        .onClick(()=>{
J
jiangbo 已提交
311
          this.simpleVarName +=1;
J
jiangbo 已提交
312
        })
J
jiangbo 已提交
313 314
      Text(JSON.stringify(this.simpleVarName))
        .fontSize(50)
J
jiangbo 已提交
315 316
    }
    .height(500)
J
jiangbo 已提交
317
  }
J
jiangbo 已提交
318 319 320
}
```

J
jiangbo 已提交
321
### 示例2(在Entry页面定义LocalStorage):
J
jiangbo 已提交
322 323 324 325

```
let storage = new LocalStorage({"PropA":47});
@Entry(storage)
J
jiangbo 已提交
326
@Component 
J
jiangbo 已提交
327 328 329
struct ComA {    
  @LocalStorageLink("PropA") storLink : number = 1;    
  build() {    
J
jiangbo 已提交
330 331
	Column() {        
	  Text(`Parent from LocalStorage $(this.storLink)`)            				                 
J
jiangbo 已提交
332 333 334
        .onClick(()=>this.storLink+=1)            
	    Child()    
 	  }    
J
jiangbo 已提交
335 336
  }
}
J
jiangbo 已提交
337 338 339 340


@Component
struct Child{    
J
jiangbo 已提交
341 342
  @LocalStorageLink("PropA") storLink : number = 1;    
  build() {    
J
jiangbo 已提交
343 344
	Text(`Parent from LocalStorage $(this.storLink)`)        
	  .onClick(()=>this.storLink1+=1)    
J
jiangbo 已提交
345 346
  }
}
J
jiangbo 已提交
347
```