HarmonyOS鸿蒙Next中被ObservedV2和Trace装饰后的对象存储到AppStorageV2,取出来的对象的key都带有_ob_这个怎么解决,不想要这个前缀

HarmonyOS鸿蒙Next中被ObservedV2和Trace装饰后的对象存储到AppStorageV2,取出来的对象的key都带有_ob_这个怎么解决,不想要这个前缀 这个对象的字段如下

ObservedV2
export class VHKitBaseStyleType {
  @Trace placeholderStyle: VHKitTextStyleType;
  @Trace statusBarContentColor: string;
  @Trace navBarHeight: number;
  @Trace navBarBgColor: ResourceColor;
  @Trace navBarBackIconColor: ResourceColor;
  @Trace navBarLeftLabelColor: ResourceStr;
  @Trace leftRightPadding: string | number;
  @Trace navBarTitleColor: ResourceColor;
  @Trace navBarTitleFontSize: string | number;

更多关于HarmonyOS鸿蒙Next中被ObservedV2和Trace装饰后的对象存储到AppStorageV2,取出来的对象的key都带有_ob_这个怎么解决,不想要这个前缀的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

状态管理V2装饰器会为装饰的变量生成getter和setter方法,同时为原有变量名添加__ob_的前缀,当前无法避免,详情请参考官方文档

前缀不影响对象属性的getter和setter方法使用。

如果涉及序列化与反序列化,可通过如下方法,将前缀去除:

export function convertKeysToCamelCase(obj: ESObject): ESObject {
  if (obj && typeof obj === 'object') {
    const newObj: ESObject = {};
    Object.keys(obj).forEach((key) => {
      if (obj.hasOwnProperty(key)) {
        const newKey = key.replace(/(__ob_)/g, '');
        newObj[newKey] = convertKeysToCamelCase(obj[key]);
      }
    })
    return newObj;
  } else {
    return obj;
  }
}

更多关于HarmonyOS鸿蒙Next中被ObservedV2和Trace装饰后的对象存储到AppStorageV2,取出来的对象的key都带有_ob_这个怎么解决,不想要这个前缀的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

在HarmonyOS鸿蒙Next中,使用ObservedV2Trace装饰的对象存储到AppStorageV2时,系统会自动添加_ob_前缀以标识被观察的对象。如果你不想要这个前缀,可以通过以下方式解决:

  1. 手动去除前缀:在从AppStorageV2取出对象后,手动去除_ob_前缀。
  2. 自定义存储逻辑:在存储对象时,使用自定义的键名,避免系统自动添加前缀。
  3. 使用其他存储方式:如果不需要观察功能,可以考虑使用其他存储方式,如LocalStoragePersistentStorage,避免使用ObservedV2Trace装饰器。

通过这些方法,你可以避免_ob_前缀的出现。

回到顶部