前言:
之前就用过AppStorageV2做数据共享,但是没怎么弄明白使用方法,今天研究了一阵,跟大家分享下研究结果。
我们还是和之前一样,参考官方文档和示例代码进行学习,链接如下:
文档中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-new-appstoragev2这里我就简单总结一下:
1、AppStorageV2类似AppStorage,全局状态共享,主要是针对类的共享。
2、如果想实现类数据变化,类需要加上@ObservedV2@Trace,并在@ComponentV2组件中配合@Local使用。
3、后面我的代码中的全局数据和组件内部的局部数据是不一样的,删除全局的数据,并不影响局部数据,所以UI不会变化。但是你打印全局的数据时,却发现没有了,那是因为被删掉了。
下面是自己研究,写的示例,大家可以配合官方文档参考下:
Index.ets
import { AppStorageV2 } from '@kit.ArkUI';
@ObservedV2
class Message{
@Trace message: string = '';
}
@Entry
@ComponentV2
struct Index {
@Local message: Message =AppStorageV2.connect( Message, () => new Message())!;
build() {
Column({space:20}) {
Button(this.message.message == "" ?"点击赋值": this.message.message )
.onClick(()=>{
this.message.message = '父组件赋值'
})
// 子组件
Son()
// 测试
Test()
}
.width("100%")
.height("100%")
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}
@ComponentV2
struct Test{
build() {
Column({space:20}){
Button( "全局数据打印")
.onClick(()=>{
let message = AppStorageV2.connect( Message, () => new Message())!;
console.log("全局数据" + message.message)
})
Button("获取所有的key")
.onClick(()=>{
let keys = AppStorageV2.keys()
console.log("全局的keys" + keys)
})
Button( "删除全局数据")
.onClick(()=>{
AppStorageV2.remove(Message)
})
}
}
}
@ComponentV2
struct Son {
@Local message: Message =AppStorageV2.connect( Message, () => new Message())!;
build() {
Column() {
Button(this.message.message == "" ?"点击赋值": this.message.message )
.onClick(()=>{
this.message.message = '子组件赋值'
})
}
}
}
效果图:
以上是个人经验分享