关于序列化后会有\_\_ob\_前缀的问题,可以在序列前替换掉\_\_ob\_前缀,demo如下import { plainToClass } from "class-transformer"; @ObservedV2 class Son { @Trace age: number = 100; } class Father { son: Son = new Son(); } @Entry @Component struct Index { father: Father = new Father(); aboutToAppear(): void { let a = JSON.stringify(this.father); let b: Father = plainToClass(Father,this.father); //{"son":{"__ob_age":100}}替换成{"son":{"age":100}} console.log(JSON.stringify(convertKeysToCamelCase(this.father))) } build() { Column() { // 当点击改变age时,Text组件会刷新 Text(`${this.father.son.age}`) .onClick(() => { this.father.son.age++; }) } } } // utils.ets export function underscoreToCamelCase(underscoreString:string):string { // 捕获__ob_替换成'' return underscoreString.replace(/(__ob_)/g, (match:string, letter:string):string=> { console.log(letter) return ''; }); } 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 = underscoreToCamelCase(key); newObj[newKey] = convertKeysToCamelCase(obj[key]); } }) return newObj; } else { return obj; } }
关于序列化后会有\_\_ob\_前缀的问题,可以在序列前替换掉\_\_ob\_前缀,demo如下