HarmonyOS 使用ObjectLink观察对象中的数组,修改数组长度,监听不到数据变化

代码如下:

// 数据类型  
@Observed  
export class TEST {  
  public rightActions: ObservedArray<ActionVM> = new ObservedArray([])  
}  
@Observed  
class ObservedArray<T> extends Array<T>{  
  constructor(args:T[]) {  
    if (args instanceof Array) {  
      super(...args);  
    } else {  
      super(args)  
    }  
  }  
}

组件:

@Component  
export struct TMSTitleBarCmp {  
  @ObjectLink test: TEST  
  build() {  
    RelativeContainer() {  
      Row() {  
        //  显示数组长度  
        Text('' + this.test.rightActions.length)  
      }  
      .height('100%')  
      .alignRules({  
        'center': { 'anchor': '__container__', 'align': VerticalAlign.Center },  
        'left': { 'anchor': '__container__', 'align': HorizontalAlign.Start }  
      })  
      .id('leftPanel')  
      .margin({ left: 5 })  
      .height(44 + px2vp(Globals.getStatusBarHeightNumber()))  
      .padding({ top: Globals.getStatusBarHeight() })  
    }.onClick(() => {  
      //  往rightActions里添加数据  
      this.test.rightActions.push(new ActionVM())  
    })  
  }  
}

初始化组件代码:

TMSTitleBarCmp({test:new TEST()})
HarmonyOS
2024-09-24 12:07:09
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

参考:

class ActionVM {  
  name: string;  
  age: number;  
  
  constructor(name: string = '', age: number = 0) {  
    this.name = name;  
    this.age = age;  
  }  
}  
  
@Observed  
export class TEST {  
  public rightActions: ObservedArray<ActionVM> = new ObservedArray([])  
}  
  
@Observed  
class ObservedArray <T> extends Array<T> {  
  constructor(args: T[]) {  
    if (args instanceof Array) {  
      super(...args);  
    } else {  
      super(args)  
    }  
  }  
}  
  
@Entry  
@Component  
struct Index {  
  @State message: string = 'Hello World';  
  @State test: TEST = new TEST();  
  
  build() {  
    Row() {  
      Column() {  
        TMSTitleBarCmp({ test: this.test.rightActions })  
      }  
      .width('100%')  
    }  
    .height('100%')  
  }  
}  
@Component  
export struct TMSTitleBarCmp {  
  @ObjectLink test: ObservedArray<ActionVM>  
  
  build() {  
    RelativeContainer() {  
      Row() {  
        // 显示数组长度  
        Text('' + this.test.length)  
        Text('' + JSON.stringify(this.test))  
      }  
      .height(50)  
      .alignRules({  
        'center': { 'anchor': '__container__', 'align': VerticalAlign.Center },  
        'left': { 'anchor': '__container__', 'align': HorizontalAlign.Start }  
      })  
      .id('leftPanel')  
      .margin({ left: 5 })  
      .padding({ top: 22 })  
    }.onClick(() => {  
      console.info(`mast start`)  
      // 往rightActions里添加数据  
      this.test.push(new ActionVM('小明', 3))  
      console.info(`mast rightActions${this.test.length}`)  
    })  
  }  
}
分享
微博
QQ
微信
回复
2024-09-24 15:32:27
相关问题
如何监听数组对象属性变化
2324浏览 • 1回复 待解决
HarmonyOS数组长度上限是多少
274浏览 • 1回复 待解决
HarmonyOS Swiper支持动态修改数据
461浏览 • 1回复 待解决
如何判断一个对象是否在对象数组
2382浏览 • 1回复 待解决
ForEach数组数据无法传输
5218浏览 • 1回复 待解决
数组嵌套数组场景懒加载实现
622浏览 • 1回复 待解决
ArkTS数组复制方法
1126浏览 • 1回复 待解决