HarmonyOS 鸿蒙Next 多重嵌套的模型属性监听
HarmonyOS 鸿蒙Next 多重嵌套的模型属性监听
一个多重嵌套的model,该如何在controller里面监听到这个model的属性值发生改变啊?
参考demo:
class ClassA {
a: number;
b: ClassB;
constructor(a: number) {
this.a = a;
this.b = new ClassB(a + 2, 2 * a);}
getA(): number {return this.a; }
setA(a: number): void {this.a = a;}}
@Observed
class ClassC {
c: number;
constructor(c: number) {this.c = c;}
getC(): number {return this.c;}
setC(c: number): void {this.c = c; }}
@Observed
class ClassB {
b: number = 47;
c: ClassC;
constructor(b: number, c: number) {
this.b = b;
this.c = new ClassC(c);}
getB(): number {
return this.b; }
setB(b: number): void {
this.b = b;}
getC(): number {
return this.c.getC();}
setC(c: number): void {
return this.c.setC(c);
}}
@Component
struct ViewClassB {
@ObjectLink b: ClassB;
build() {
Column({ space: 10 }) {
Text(`b: ${this.b.getB()}`)
Button("5 Change B")
.onClick(() => {
this.b.setB(this.b.getB() + 1);
})}}}
@Component
struct ViewClassC {
@ObjectLink c: ClassC;
build() {
Column({ space: 10 }) {
Text(`c: ${this.c.getC()}`)
Button("4 Change C")
.onClick(() => {
this.c.setC(this.c.getC() + 1);
}) }}}
@Entry
@Component
struct MyView {
// 对象包含关系:A对象(B对象(C对象))
@State a: ClassA = new ClassA(10); //10,12,20
build() {
Column({ space: 10 }) {
Text(`c: ${this.a.b.c.c}`)
Button("1 Change ClassC.c")
.onClick(() => {
this.a.b.c.c += 1;
})
Text(`b: ${this.a.b.b}`)
Button("2 Change ClassB.b")
.onClick(() => {
this.a.b.b += 1;
})
// 改变A对象下a属性时可以触发@State A对象数据刷新,因此会出现先按了4,5按钮后123上数据由于处于对象内对象无法更新,点击了3触发@StateA对象内部数据变更会触发对象数据刷新
Text(`b: ${this.a.a}`)
Button("3 Change ClassA.a")
.onClick(() => {
this.a.a += 1;
})
//A对象下B对象,C对象均建议使用子组件+[@ObjectLink](/user/ObjectLink)来使用
ViewClassC({ c: this.a.b.c }) // Text(`c: ${this.b.c.c}`)的替代写法
ViewClassB({ b: this.a.b }) }}}
可以参考使用[@Observed](/user/Observed)+[@ObjectLink](/user/ObjectLink)属性来实现
更多关于HarmonyOS 鸿蒙Next 多重嵌套的模型属性监听的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,处理多重嵌套的模型属性监听,可以通过数据绑定和观察者模式实现。鸿蒙系统提供了丰富的组件和API来支持复杂的数据流管理。
对于多重嵌套的模型,首先确保你的数据模型遵循可观察性原则。你可以使用@ObservedObject
或相应的数据绑定机制,将模型绑定到UI组件上。在嵌套模型中,每个层级的数据变化都可以通过观察者模式触发相应的UI更新。
具体来说,当内层模型的属性发生变化时,该变化会向上层传播,直至触发UI组件的重新渲染。鸿蒙的响应式框架会监听这些变化,并自动更新绑定的视图。
要实现这一点,你可以在数据模型中使用@Published
或类似的属性包装器来标记需要监听的属性。这些属性在变化时会通知绑定的视图进行更新。
例如,如果你有一个用户模型,其中包含地址模型,而地址模型又包含城市、街道等属性,你可以在每个层级上设置监听,确保任何属性的变化都能被捕获并反映到UI上。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html