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)  
    }  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

组件:

@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())  
    })  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

初始化组件代码:

TMSTitleBarCmp({test:new TEST()})
  • 1.
HarmonyOS
2024-09-24 12:07:09
786浏览
收藏 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}`)  
    })  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
分享
微博
QQ
微信
回复
2024-09-24 15:32:27
相关问题
如何监听数组对象属性变化
3136浏览 • 1回复 待解决
HarmonyOS 数组对象数据刷新
838浏览 • 1回复 待解决
HarmonyOS 数组对象排序
1108浏览 • 1回复 待解决
HarmonyOS 动画结束回调监听不到
634浏览 • 1回复 待解决
HarmonyOS数组长度上限是多少
1105浏览 • 1回复 待解决
HarmonyOS 数组监听问题
677浏览 • 1回复 待解决