在HarmonyOS NEXT开发中@ObjectLink到底怎么用?这个页面是数据是一个ClassA数组记作classA[],ClassA里面又有一个ClassB数组,大概是下面这样的:
@Observed
export class ClassA {
a: number;
datas: ClassB[];
}
@Observed
export class ClassB {
b: number;
c: number;
}
@Entry
@Component
struct Index {
@State pageDatas: ClassA[] = []
build() {
Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) {
ForEach(this.pageDatas, (page_item: ClassA, page_index: number) => {
TabContent() {
PageView({
page_item: page_item,
})
}
}
}
@Component
export struct PageView {
@ObjectLink page_item: ClassA;
build() {
Column() {
Text(this.page_item.a + "")
.onClick((e: ClickEvent) => {
弹出Dialog,
选择a值
this.page_item.a = selecta
}
ForEach(this.page_item.datas, (item: ClassB, index: number) => {
ItemView({
page_item: this.page_item
item: item
})
}, (item: ClassB) => JSON.stringify(item))
}
}
}
@
Component
export struct ItemView {
@ObjectLink page_item: ClassA;
@ObjectLink item: ClassB;
build() {
Row() {
Button("加1")
.onClick((e: ClickEvent) => {
this.item.b = this.item.b + 1
}
TextInput({ text: this.item.b === 0 ? '' : this.item.b.toString() })
.onChange((value: string) => {
if (value === null || value === undefined || value === '') {
this.item.b = 0
} else {
this.item.b = parseInt(value);
}
}
Text(this.page_item.a * item.b * item.c + "m³")
}
}
}
想要的效果是:
1、在Index页面的每个page里面点击对应弹出Dialog,选择a值,能够改变Text(this. page_item.a item .b item.c+“m³”)显示的值
2、在TextInput中输入对应的值也能够改变Text(this. page_item.a item .b item.c+“m³”)显示的值
3、Button点击后也能够改变TextInput中显示的值,并且也能够改变Text(this. page_item.a item .b item.c+“m³”)显示的值
只需要对ClassA、ClassB属性改变,从而改变UI刷新,关于使用ObjectLink装饰器 可以参考对象数组的使用,而且 发给的这个demo,无法运行,问题很多,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...对象数组\对于 这类需要深层嵌套的查看下关于复杂嵌套对象属性更改失效的案例,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...复杂嵌套对象属性更改失效