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

J
jiangbo 已提交
3
  说明:该功能从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
J
jiangbo 已提交
4

J
jiangbo 已提交
5
LocalStorage是应用程序中的存储单元,是为应用程序范围内的可变状态属性和非可变状态属性提供存储,可变状态属性和非可变状态属性是构建应用程序UI的特定部分。如一个Ability的UI。
J
jiangbo 已提交
6

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

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

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

J
jiangbo 已提交
13
LocalStorage的生命周期跟随其关联的Ability。
J
jiangbo 已提交
14

J
jiangbo 已提交
15
## @LocalStorageLink装饰器
J
jiangbo 已提交
16

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

J
jiangbo 已提交
19
## @LocalStorageProp装饰器
J
jiangbo 已提交
20

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

J
jiangbo 已提交
23
  注意:LocalStorage定义时没有给定默认值时,那么可以使用组件内@LocalStorageLink和@LocalStorageProp的默认值,如果定义时给定了默认值,那么不会再使用@LocalStorageLink和@LocalStorageProp的默认值。
J
jiangbo 已提交
24

J
jiangbo 已提交
25
## LocalStorage接口:
J
jiangbo 已提交
26

J
jiangbo 已提交
27
### Constructor  
J
jiangbo 已提交
28

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

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

J
jiangbo 已提交
35
### Has
J
jiangbo 已提交
36

J
jiangbo 已提交
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| 参数名 | 类型   | 返回值  | 必填 | 描述                           |
| ------ | ------ | ------- | :--: | ------------------------------ |
| key    | string | boolean |  是  | 判断对应属性的属性值是否存在。 |

### Get

| 参数名 | 类型   | 返回值         | 必填 | 描述                 |
| ------ | ------ | -------------- | :--: | -------------------- |
| key    | string | T or undefined |  是  | 获取对应key值的value |

### Set

| 参数名   | 类型   | 返回值  | 必填 | 描述                                                  |
| -------- | ------ | ------- | :--: | ----------------------------------------------------- |
| key      | string | boolean |  是  | 如果存在key值,设置value值并返回true。否则返回false。 |
| newValue | T      | boolean |  是  | 如果存在key值,设置value值并返回true。否则返回false。 |

### SetOrCreate

| 参数名   | 类型   | 返回值  | 必填 | 描述                                                         |
| -------- | ------ | ------- | :--: | ------------------------------------------------------------ |
| key      | string | boolean |  是  | 如果已存在与给定键名字相同的属性,更新其值且返回true。       |
| newValue | T      | boolean |  是  | 如果不存在具有给定名称的属性,在LocalStorage中创建具有给定默认值的新属性,默认值必须是T类型。不允许undefined or null 返回true。 |

### Link

| 参数名 | 类型   | 返回值 | 必填 | 描述                                                         |
| ------ | ------ | ------ | :--: | ------------------------------------------------------------ |
| key    | string | T      |  是  | 如果存在具有给定键的属性,返回到此属性的双向绑定,该双向绑定意味着变量或者组件对数据的更改将同步到LocalStorage,然后通过LocalStorage实例同步到任何变量或组件。如果不存在给定键的属性,返回undefined。 |

### SetAndLink

| 参数名       | 类型   | 返回值 | 必填 | 描述                                                         |
| ------------ | ------ | ------ | :--: | ------------------------------------------------------------ |
| key          | string | @Link  |  是  | 与Link接口类似,如果当前的key保存与LocalStorage,返回该key值对应的value值。如果该key值未被创建,则创建一个对应的defaultValue的Link返回。 |
| defaultValue | T      | @Link  |  是  | 与Link接口类似,如果当前的key保存与LocalStorage,返回该key值对应的value值。如果该key值未被创建,则创建一个对应的defaultValue的Link返回。 |

 注:Link接口链接:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ui/ts-component-states-link.md

### Prop

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

### SetAndProp

| 参数名       | 类型   | 返回值 | 必填 | 描述                                                         |
| ------------ | ------ | ------ | :--: | ------------------------------------------------------------ |
| key          | string | @Prop  |  是  | 与Prop接口类似,如果当前的key保存与LocalStorage,返回该key值对应的value值。如果该key值未被创建,则创建一个对应的defaultValue的Prop返回。 |
| defaultValue | S      | @Prop  |  是  | 与Prop接口类似,如果当前的key保存与LocalStorage,返回该key值对应的value值。如果该key值未被创建,则创建一个对应的defaultValue的Prop返回。 |

注:Prop接口链接:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ui/ts-component-states-prop.md

### Delete

| 参数名 | 类型   | 返回值  | 必填 | 描述                                                         |
| ------ | ------ | ------- | :--: | ------------------------------------------------------------ |
| key    | string | boolean |  是  | 删除key指定的键值对,如果存在且删除成功返回true,不存在或删除失败返回false。 |

### Keys

| 参数名 | 类型 | 返回值        | 必填 | 描述                         |
| ------ | ---- | ------------- | :--: | ---------------------------- |
| none   | none | array<string> |  是  | 返回包含所有键的字符串数组。 |

### Size

| 参数名 | 类型 | 返回值 | 必填 | 描述                   |
| ------ | ---- | ------ | :--: | ---------------------- |
| none   | none | number |  是  | 与Map.size()用法相同。 |

### Clear

| 参数名 | 类型 | 返回值  | 必填 | 描述                                                        |
| ------ | ---- | ------- | :--: | ----------------------------------------------------------- |
| none   | none | boolean |  是  | 删除所有的属性,如果当前有状态变量依旧引用此属性,返回false |
J
jiangbo 已提交
114

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

J
jiangbo 已提交
117
```javascript
J
jiangbo 已提交
118 119
import Ability from '@ohos.appLication.Ability'
export default class MainAbility extends Ability {    
J
jiangbo 已提交
120 121 122 123 124 125 126
  storage : LocalStorage    
  onCreate(want) {    
    this.storage = new LocalStorage();
    this.storage.setOrCreate("storageSimpleProp",121);    
    console.log("[Demo MainAbility onCreate]");    
    globalThis.abilityWant = want;   
  }  
J
jiangbo 已提交
127
  onDestroy() {    
J
jiangbo 已提交
128
    console.log("[Demo MainAbility onDestroy]")  
J
jiangbo 已提交
129 130
  }    
  onWindowStageCreate(windowStage) {
J
jiangbo 已提交
131
    windowStage.setUIContent(this.context,"pages/index",this.storage)    
J
jiangbo 已提交
132 133
  }    
  onWindowStageDestroy() {
J
jiangbo 已提交
134
    console.log("[Demo] MainAbility onWindoeStageDestroy")   
J
jiangbo 已提交
135 136
  }    
  onForeground() {
J
jiangbo 已提交
137
    console.log("[Demo] MainAbility onForeground")   
J
jiangbo 已提交
138 139
  }    
  onBackground() {
J
jiangbo 已提交
140
    console.log("[Demo] MainAbility onBackground")    
J
jiangbo 已提交
141 142
  }
}
J
jiangbo 已提交
143 144
```

J
jiangbo 已提交
145
@Component组件获取数据:
J
jiangbo 已提交
146 147 148 149 150 151

```
let storage = LocalStorage.GetShared()
@Entry(storage)
@Component
struct LocalStorageComponent {
J
jiangbo 已提交
152 153
  @LocalStorageLink("storageSimpleProp") simpleVarName: number = 0
  build() {
J
jiangbo 已提交
154 155 156
    Column(){
      Text(this.simpleVarName.toString())
        .onClick(()=>{
J
jiangbo 已提交
157
          this.simpleVarName +=1;
J
jiangbo 已提交
158
        })
J
jiangbo 已提交
159 160
      Text(JSON.stringify(this.simpleVarName))
        .fontSize(50)
J
jiangbo 已提交
161 162
    }
    .height(500)
J
jiangbo 已提交
163
  }
J
jiangbo 已提交
164 165 166
}
```

J
jiangbo 已提交
167
### 示例2(在Entry页面定义LocalStorage):
J
jiangbo 已提交
168 169 170 171

```
let storage = new LocalStorage({"PropA":47});
@Entry(storage)
J
jiangbo 已提交
172
@Component 
J
jiangbo 已提交
173 174 175
struct ComA {    
  @LocalStorageLink("PropA") storLink : number = 1;    
  build() {    
J
jiangbo 已提交
176 177
	Column() {        
	  Text(`Parent from LocalStorage $(this.storLink)`)            				                 
J
jiangbo 已提交
178 179 180
        .onClick(()=>this.storLink+=1)            
	    Child()    
 	  }    
J
jiangbo 已提交
181 182
  }
}
J
jiangbo 已提交
183 184 185 186


@Component
struct Child{    
J
jiangbo 已提交
187 188
  @LocalStorageLink("PropA") storLink : number = 1;    
  build() {    
J
jiangbo 已提交
189 190
	Text(`Parent from LocalStorage $(this.storLink)`)        
	  .onClick(()=>this.storLink1+=1)    
J
jiangbo 已提交
191 192
  }
}
J
jiangbo 已提交
193
```