HarmonyOS 一次性完成对象所有属性的赋值替换

在ObservedV2装饰的一个类中,所有属性都被@Trace装饰,如何一次性完成将新对象的所有属性的值替换到已有对象上?由于直接替换对象导致观察会失效,视图无法刷新,所以只能给每一个属性单独赋值很麻烦。

例如实体类Bean结构如下:

@ObservedV2
class Bean {
  @Trace paramA: string = ''
  @Trace paramB: string = ''
  @Trace paramC: string = ''
  ...
  @Trace paramZ: string = ''
}

在ui中有:

struct Component {
  viewmodel :ViewModel = new ViewModel()
  build() {
    Column() {
      Text(this.viewmodel.bean.paramA)
      Text(this.viewmodel.bean.paramB)
      Text(this.viewmodel.bean.paramC)
      ...
      Text(this.viewmodel.bean.paramZ)
    }
  }
}

在viewmodel中有:

class ViewModel {
  bean: Bean = new Bean()

  async call() {
    //调用服务器接口await返回一个新的Bean对象
    let result: Bean = await
    ...
    //ui不会刷新
    //this.bean = result
    //这样可以 但面对整个项目来说可能有相当多处类似情况,过于不合理
    this.bean.paramA = result.paramA
    this.bean.paramB = result.paramB
    this.bean.paramC = result.paramC
    ...
    this.bean.paramZ = result.paramZ
  }
}

有没有什么方法可以解决以上问题?

HarmonyOS
2025-01-09 14:14:14
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

可用@State修饰一下定义的viewmodel,参考示例如下:

class ViewModel {
  bean: Bean = new Bean()
}

@ObservedV2
class Bean {
  @Trace paramA: string = '0'
  @Trace paramB: string = '0'
  @Trace paramC: string = '0'
  @Trace paramZ: string = '0'
}

@Entry
@Component
struct Index {
  getData(): void {
    setTimeout(() => {
      let data: Bean = {
        paramA: '1',
        paramB: '1',
        paramC: '1',
        paramZ: '1',
      }
      this.viewmodel.bean = data;
    }, 1000)
  }

  @State viewmodel: ViewModel = new ViewModel()

  build() {
    Column() {
      Text(this.viewmodel.bean.paramA)
      Text(this.viewmodel.bean.paramB)
      Text(this.viewmodel.bean.paramC)
      Text(this.viewmodel.bean.paramZ)
      Button('获取数据').onClick(() => {
        this.getData()
      })
    }
  }
}
分享
微博
QQ
微信
回复
2025-01-09 16:26:07
相关问题
HarmonyOS 每秒执行一次函数
548浏览 • 2回复 待解决
HarmonyOS setInterval如何立即执行一次
373浏览 • 1回复 待解决
HarmonyOS 如何只取消某一次监听
363浏览 • 1回复 待解决
HarmonyOS flutter run 会自动uninstall 一次
382浏览 • 1回复 待解决
HarmonyOS里面不能一次创建多级目录
703浏览 • 1回复 待解决
HarmonyOS web组件拦截每一次跳转
302浏览 • 1回复 待解决
有没有一次编译,多端部署资料
664浏览 • 1回复 待解决
HarmonyOS HasMap 如何转成对象
437浏览 • 1回复 待解决
HarmonyOS 定义对象赋值错误
386浏览 • 1回复 待解决
HarmonyOS 对象赋值般使用什么方式
169浏览 • 1回复 待解决
动画如何做渲染一次不消失
8116浏览 • 1回复 待解决
HarmonyOS json转换成对象
417浏览 • 2回复 待解决