HarmonyOS 鸿蒙Next AppStorageV2如何取出AppStorageV1中的数据

HarmonyOS 鸿蒙Next AppStorageV2如何取出AppStorageV1中的数据 比如:

在组件A(V1)中: AppStorage.setOrCreate('bbbb', '1111')

在组建B(V2)中:

@Local storage: Param11 = AppStorageV2.connect(Param11, 'bbbb', () => new Param11)!;

@ObservedV2

class Param11 {
  @Trace bbbb: number = 0
}

组件B中并不能取出组件A存储的bbbb字段及其对应的value。

我知道组件B外套个Bridge(V1),进行Watch再传给组件B,是可以的。但是我想知道有没有更直接方法获取(在V2组件中),类似我上面的案例


更多关于HarmonyOS 鸿蒙Next AppStorageV2如何取出AppStorageV1中的数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

关于AppStorage v1和v2 是两套不同的东西不共通,关于状态管理是使用同一套来进行管理,这种场景可以参考这个demo:

//index.ets:
import { router } from '@kit.ArkUI';

class Data {
  code: number;

  constructor(code: number) {
    this.code = code;
  }
}

AppStorage.setOrCreate('PropA', 47);
AppStorage.setOrCreate('PropB', new Data(50));

@Entry()
@Component
struct Index {
  @StorageLink('PropA') storageLink: number = 1;

  @StorageLink('PropB') storageLinkObject: Data = new Data(1);

  build() {
    Column({ space: 20 }) {
      Text(`From AppStorage ${this.storageLink}`)
        .onClick(() => {
          this.storageLink += 1;
        })

      Text(`From AppStorage ${this.storageLinkObject.code}`)
        .onClick(() => {
          this.storageLinkObject.code += 1;
        })
      Button('toV2')
        .onClick(()=>{
          router.pushUrl({url:'pages/PageV2'})
        })
    }
  }
}
//PageV2.ets:
import { router } from '@kit.ArkUI';
import { AppStorageV2 } from '@kit.ArkUI';
import { Sample } from '@kit.ArkUI';

class Data {
  code: number;

  constructor(code: number) {
    this.code = code;
  }
}
// 数据中心
@ObservedV2
export class Sample {
  @Trace p1: number = 0;
  p2: number = 10;
}

let value: number = AppStorage.get('PropA') as number;
@Entry()
@ComponentV2
struct Index2 {
  @Local prop: Sample = AppStorageV2.connect(Sample, () => new Sample())!;

  build() {
    Column({ space: 20 }) {
      Text(''+value)
      // 获取当前AppStorageV2里面的所有key
      Text(`all keys in AppStorage: ${AppStorageV2.keys()}`)
        .fontSize(30)
      Button('back')
        .onClick(()=>{
          router.back()
        })
    }
  }
}

在设计上,希望V1和V2的代码是完全隔离的,因为V1能实现的功能,V2能做的更好。但从实际角度出发,V1已经有很大的基础,一次性迁移成V2也不符合实际,因此在V1的代码中使用V2的部分能力是允许的,V2中也没有完全禁止V1

关于v1和v2的混用可以参考文档: 华为开发者官网

更多关于HarmonyOS 鸿蒙Next AppStorageV2如何取出AppStorageV1中的数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不同存放方式吧 v1跟v2不能混用这个

在HarmonyOS鸿蒙Next中,AppStorageV2AppStorageV1的数据结构并不直接兼容。要从AppStorageV1中取出数据,首先需要将AppStorageV1的数据导出为JSON格式,然后将该JSON数据导入到AppStorageV2中。具体步骤如下:

  1. 导出AppStorageV1数据:使用AppStorageV1exportData()方法将数据导出为JSON字符串。

  2. 导入AppStorageV2数据:使用AppStorageV2importData()方法将JSON字符串导入到AppStorageV2中。

以下是示例代码:

// 导出AppStorageV1数据
const v1Data = AppStorageV1.exportData();

// 导入AppStorageV2数据
AppStorageV2.importData(v1Data);
回到顶部