比如,我们要实现一个点击列表上的某个item,实现点击选中,要改变这个item的背景色,这时候会遇到自己已经明明修改了代表选中的字段的值,但是样式没有刷新,解决方法如下:

修改前:

export class DzkyLineDateModelLocal{
  date:string=""
  week:string=""
  isSelect: boolean = false;
  monthDay: string = "";

  constructor(date: string, week: string, isSelect: boolean, monthDay: string) {
    this.date = date;
    this.week = week;
    this.isSelect = isSelect;
    this.monthDay = monthDay;
  }
}

修改后:

@ObservedV2
export class DzkyLineDateModelLocal{
  date:string=""
  week:string=""
  @Trace isSelect: boolean = false;
  monthDay: string = "";

  constructor(date: string, week: string, isSelect: boolean, monthDay: string) {
    this.date = date;
    this.week = week;
    this.isSelect = isSelect;
    this.monthDay = monthDay;
  }
}

注意,给实体类加 @ObservedV2 修饰符,给修改的字段加@Trace修饰符

一般到这里问题就会解决,但是如果你的实体类是通过服务端返回字符串JSON解析而来的实体类,那么这个时候@ObservedV2 @Trace修饰符就会无效。我只能用一个很不优雅的方法去解决它:

解决方法是:通过服务端解析JSON字符串拿到的实体类为modelA,这时候再复制一个字段一模一样的modelB(记得要加@ObservedV2和@Trace修饰符!),把modelA的值一个个的手动赋值给modelB,然后modelB的修饰符:@ObservedV2 @Trace 就会生效。列表的数据源采用modelB,页面就会刷新

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐