HarmonyOS ObjectLink修饰符对象的属性改变不能引起UI刷新

辛苦尽快查看下是什么原因?

HarmonyOS ObjectLink修饰符对象的属性改变不能引起UI刷新-鸿蒙开发者社区

HarmonyOS
2024-09-03 10:42:32
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

该问题的原因:

通过JSON.parse得到的对象并不是通过class构造出的实例,其数据变化无法被观测到,所以不能实现ui刷新,

这里需要使用三方库 reflect-metadata 和 class-transformer

安装命令:

ohpm install reflect-metadata 
ohpm install class-transformer

具体使用方法:

1、在StationSearchFilterEntity.ets 引入:

import { Type } from 'class-transformer' 
import 'reflect-metadata' 
 
@Observed 
export class StationSearchFilterEntity{ 
  @Type(() => FirstCategory) 
  filter: FirstCategory[] = []; // 公共站下拉筛选条件 
  @Type(() => QuickFilter) 
  homeFilter:QuickFilter[] = []; //快捷筛选 
  @Type(() => ActivityFilter) 
  activityFilter:ActivityFilter[] = []; //活动筛选条件 
} 
 
/** 
 * 电站 筛选的一级 
 */ 
@Observed 
export class FirstCategory{ 
  filterTypeName:string = ""; 
  filterTypeDesc:string = ""; 
  descUrl:string = ""; //代表是否有问号,点击打开具体描述 
  // filterItem:SecondCategoryArray = new SecondCategoryArray(); 
  @Type(()=> SecondCategory) 
  filterItem: SecondCategory[] = [] 
} 
 
 
/** 
 * 电站 筛选的二级 
 */ 
@Observed 
export class SecondCategory{ 
  itemCode:string = ""; 
  itemName:string = ""; 
  isSelected?: boolean = false; 
  @Type(()=> ThirdCategory) 
  stationOwner:ThirdCategory[] = []; 
}

2、index.ets中引入:

import { Type, plainToClass } from 'class-transformer' 
import 'reflect-metadata' 
 
// 需要定义一个新的类型,用来转换 
class ResponseObj { 
  @Type(() => StationSearchFilterEntity) 
  data: StationSearchFilterEntity = new StationSearchFilterEntity(); 
} 
 
// 在获取数据的地方使用以下方法获取 
 let response = JSON.parse(retStr) 
 let respObj: ResponseObj = plainToClass(ResponseObj, response) 
 this.filter = respObj.data.filter 
 this.homeFilter = respObj.data.homeFilter; 
 this.activityFilter = respObj.data.activityFilter;
分享
微博
QQ
微信
回复
2024-09-03 17:37:47
相关问题
@LocalStorageLink修饰符
777浏览 • 1回复 待解决
@State 修饰变量值改变,界面不刷新
1562浏览 • 1回复 待解决
ForEach数组发生改变UI刷新
591浏览 • 1回复 待解决
修改ForEach使用数据对象UI刷新
1824浏览 • 1回复 待解决
HarmonyOS使用@ObjectLink 数据不刷新
741浏览 • 2回复 待解决
@BuilderParam修饰属性报错
1780浏览 • 1回复 待解决