HarmonyOS ObjectLink 修饰的元素修改其属性,ui没有生效

拖拽模块A与模块B 做交换,希望模块A在被拖拽的时候影藏,交换以后显示。目前拖拽的时候显示,交换以后依然显示。

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

可以通过引入三方库 reflect-metadata 和 class-transformer,参考如下demo实现:

//TestJson.ets
import { plainToClass, Type } from 'class-transformer';
import 'reflect-metadata';
import { Person, ViewA } from './ViewA';

class ResponseObj {
  @Type(() => Person)
  data: Person[] = [];
}
@Entry
@Component
struct TestJson {
  @State list: Person[] = [];
  @State message: string = 'Click me';
  aboutToAppear(): void {
    let str = '{"data" : [{"number" :1,"age": 20, "testA": { "str" : "123"}},{"number" :2,"age": 21,"testA": {"str" : "456"}}]}'
    let jsonData: ESObject = JSON.parse(str)
    let responseObj: ResponseObj = plainToClass(ResponseObj, jsonData);
    console.log( ${responseObj.data[0] instanceof Person})
    this.list = this.list.concat(responseObj.data);
  }
  build() {
    Row() {
      Column() {
        ForEach(this.list, (item: Person, index: number) => {
          ViewA({ index: index, testA: item.testA })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}
//ViewA.ets
import { Type } from 'class-transformer'
@Observed
export class TestA {
  public str : string
  constructor(str: string) {
    this.str = str;
  }
}
export class Person {
  name: string = ''
  age: number = 1
  @Type(()=>TestA)
  testA: TestA = new TestA('')
}
@Component
export struct ViewA {
  @ObjectLink testA: TestA
  index: number = -1;
  build() {
    Row(){
      Button(View A ${this.testA.str}).onClick(() =>{
        this.index += 1;
        this.testA.str = ${this.index} : Test A String
      })
    }.margin({top : 10 })
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 获取系统时间戳没有生效
286浏览 • 1回复 待解决
@BuilderParam修饰属性报错
1780浏览 • 1回复 待解决
readonly修饰数组无法获取数组元素
2049浏览 • 1回复 待解决
textfield截断属性生效
2856浏览 • 1回复 待解决