【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十一)

课程地址: 黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发

(本篇笔记对应课程第 18 节)

P18《17.ArkUI-状态管理@Observed 和 @ObjectLink》

第一件事:嵌套对象的类型上加上 @Observed 装饰器 ,这里嵌套的还是 Person 类型,如果嵌套的是其它类型,则这些类型都需要加上 @Observed 装饰器

第二件事:需要给嵌套对象内部的对象加上 @ObjectLink 装饰器

但现在嵌套对象的内部对象是作为构造方法的参数传递的,不能加 @ObjectLink 装饰器。

这样来改造一下:定义一个组件,把内部嵌套的对象传给组件,让组件把内部嵌套的对象做成变量,变量就可以加 @ObjectLink 装饰器了,具体这样来做:

用代码来实践一下:

完善功能:当任务处于已完成状态时,任务名称变灰且加中划线:

此时验证效果,没有生效!为什么呢?因为勾选或取消勾选时,是对每个任务对象的 finished 属性进行重新赋值,对数组中的对象属性的修改,是不能感知到并触发视图更新的。

怎样实现呢?

第一步:给 Task 类加 @Observed 装饰器

第二步:在子组件中使用 @ObjectLink 接收 item 对象:

此时可以看到已经可以实现勾选完成的任务项的名称变成灰色了,说明我们实现了数组中的元素是对象时,修改对象的属性也可以让视图更新了。

解决在子组件中调用父组件中定义的方法:将这个方法作为一个参数传递给子组件

此时操作视图发现报错了!

这是因为:子组件中调用父组件中定义的方法时,方法中的this指向已经不再是父组件了,而是调用方法的子组件,而子组件中并没有对应的数据,所以报错。

怎样解决?在传递方法时为方法绑定this:

总结:

1、本节主要讲解了@Observed 和 @ObjectLink 装饰器,它们主要是用来解决 对象内的属性是嵌套对象以及数组中的元素是对象时,这些内部对象的属性变化不能引起视图更新的问题。主要解决方式是:需要监控属性变更的对象类型上添加 @Observed 装饰器,同时给嵌套的对象或者数组元素的这个对象会产生变化的变量上前加上 @ObjectLink 装饰器。一般做法是将这个对象作为参数传递给子组件,在子组件中生明接收变量时就可以加上 @ObjectLink 装饰器 了。

2、子组件调用父组件中的方法:将父组件中的方法作为参数传递给子组件,为了解决传递后this丢失的问题,需要在传递时给方法绑定当前组件实例的this。

相关推荐
pedestrian_h31 分钟前
Spring AI 开发本地deepseek对话快速上手笔记
java·spring boot·笔记·llm·ollama·deepseek
&Cheems1 小时前
ZYNQ笔记(二十):Clocking Wizard 动态配置
笔记·fpga开发
努力毕业的小土博^_^1 小时前
【深度学习|学习笔记】 Generalized additive model广义可加模型(GAM)详解,附代码
人工智能·笔记·深度学习·神经网络·学习
怪小庄吖1 小时前
7系列 之 I/O标准和终端技术
经验分享·笔记·fpga开发·硬件架构·硬件工程·xilinx 7系列 fpga·i/o标准和终端技术
虾球xz1 小时前
游戏引擎学习第277天:稀疏实体系统
c++·学习·游戏引擎
小堃学编程1 小时前
前端学习(2)—— CSS详解与使用
前端·css·学习
chao_7892 小时前
手撕算法(定制整理版2)
笔记·算法
灰原A3 小时前
摆脱拖延症的详细计划示例
笔记
虾球xz3 小时前
游戏引擎学习第276天:调整身体动画
c++·学习·游戏引擎
虾球xz3 小时前
游戏引擎学习第275天:将旋转和剪切传递给渲染器
c++·学习·游戏引擎