HarmonyOS 对象内数组内对象属性的修改问题
如demo的层级关系,点击后向修改原对象内一个数组内对象的某个属性失败。
@Observed
export class ChannelColumn {
  /**
   * 对象唯一标识
   */
  objectKey: string = ""
  videoInfo_list: ObservedArray<TestInfo> = new ObservedArray()
}
@Observed
export class ObservedArray<T> extends Array<T> {
  constructor(args?: T[]) {
    if (args instanceof Array) {
      super(...args);
    } else {
      super();
    }
  }
}
@Observed
export class TestInfo {
  isFoldFor1003: boolean = true;
  //vip频道改版
  maintitle: string = '';
  constructor(isFoldFor1003: boolean, maintitle: string) {
    this.isFoldFor1003 = this.isFoldFor1003;
    this.maintitle = maintitle
  }
}
@Component
export struct AEnterTest {
  @State @Watch('columnItemChange') columnItem: ChannelColumn = new ChannelColumn()
  aboutToAppear(): void {
    let videoInfo_list: ObservedArray<TestInfo> = new ObservedArray()
    videoInfo_list.push(new TestInfo(false, '测试数据1'))
    videoInfo_list.push(new TestInfo(false, '测试数据2'))
    videoInfo_list.push(new TestInfo(false, '测试数据3'))
    this.columnItem.videoInfo_list = videoInfo_list
  }
  columnItemChange() {
    console.log("columnItemChange")
    for (let i = 0; i < 3; i++) {
      console.debug('修改结果=' + this.columnItem.videoInfo_list[i].maintitle + ':' +
      this.columnItem.videoInfo_list[i].isFoldFor1003)
    }
  }
  build() {
    Row() {
      ChannelBaseTemplateView({
        columnItem: this.columnItem,
      })
    }
  }
}
@Component
export struct ChannelBaseTemplateView {
  @ObjectLink columnItem: ChannelColumn
  build() {
    SpecialPicText({ columnItem: this.columnItem })
  }
}
@Component
export struct SpecialPicText {
  @ObjectLink columnItem: ChannelColumn
  build() {
    Column() {
      Text('测试点击刷新数组内的对象的属性问题')
        .id('test')
        .width('100%')
        .height(50)
        .align(Alignment.Center)
        .onClick(() => {
          this.columnItem.videoInfo_list[0].isFoldFor1003 = false;
        }
        )
    }
  }
}
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS 对象内数组排序问题 
1136浏览  • 1回复 待解决
如何监听数组内对象属性变化 
3452浏览  • 1回复 待解决
HarmonyOS 对象A数组,对象A中又嵌套一个对象B数组,修改B中的属性UI,不刷新 
1813浏览  • 1回复 待解决
HarmonyOS endable对象属性napi无法修改 
958浏览  • 1回复 待解决
HarmonyOS 是否支持对象属性进行修改 
899浏览  • 1回复 待解决
ArkUi关于page之间传递PixelMap对象,在Image对象内无法现实的问题有了解的吗? 
6116浏览  • 1回复 待解决
HarmonyOS 如何监听数组对象中元素属性的变化 
1629浏览  • 1回复 待解决
HarmonyOS 如何获取一个对象内的所有变量 
1436浏览  • 1回复 待解决
HarmonyOS 对象数组在@state修饰时,对象属性变化界面不刷新的解决办法 
1565浏览  • 1回复 待解决
FA模型不支持进程内对象共享的原因? 
1317浏览  • 1回复 待解决
HarmonyOS @Observed装饰的类,构造了对象数组,那这个数组中对象的属性变化之后,能引起视图的更新吗 
2184浏览  • 1回复 待解决
HarmonyOS 数组对象数据刷新 
1096浏览  • 1回复 待解决
HarmonyOS 如何实现根据数组元素对象属性的变化同步更新UI 
1402浏览  • 1回复 待解决
HarmonyOS 数组修改item对象的某个值,notifyDataReload无法重新渲染LazyForEach 
1085浏览  • 1回复 待解决
HarmonyOS 数组中对象的排序 
1771浏览  • 1回复 待解决
HarmonyOS  使用ObjectLink观察对象中的数组,修改数组长度,监听不到数据变化 
1717浏览  • 1回复 待解决
HarmonyOS 关于数组包裹对象中更新组件问题 
962浏览  • 1回复 待解决
HAR包内的单例对象与HAR包相互之间依赖关系问题。 
2029浏览  • 1回复 待解决
HarmonyOS 关于objectLink在数组对象中使用时,修改数据页面不刷新问题 
1953浏览  • 1回复 待解决
为什么FA模型不支持进程内对象共享 
3108浏览  • 1回复 待解决
HarmonyOS @State可以修饰对象数组 
967浏览  • 1回复 待解决
HarmonyOS 如何遍历对象属性 
961浏览  • 1回复 待解决
HarmonyOS  @Watch 如何检测数组内元素变化 
1463浏览  • 1回复 待解决
HarmonyOS  @State修饰@observed装饰的对象, 对象里的数组改变, 不会触发ui刷新 
1300浏览  • 1回复 待解决
如何判断一个对象是否在对象数组中 
4052浏览  • 1回复 待解决





















只修改list中的元素属性无法被监听到,需要对整体的list元素了调整了才能监听到。或者只有@ObservedV2和@Trace修饰需要监听的类对象的属性,可以实现动态的UI刷新。
@ObservedV2文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-new-observedv2-and-trace-V5
代码调整如下: