HarmonyOS NEXT应用开发之多层嵌套类对象监听
介绍
本示例介绍使用@Observed装饰器和@ObjectLink装饰器来实现多层嵌套类对象属性变化的监听。
效果图预览

使用说明
- 加载完成后显示商品列表,点击刷新按钮可以刷新商品图片和价格。
实现思路
- 创建FistGoodsModel类,类对象是用@Observed修饰的类SecondGoodsItemList,SecondGoodsItemList类对象是用@Observed修饰的ThirdGoodsItem类,ThirdGoodsItem类对应的商品信息,是要被监听的对象。源码参考GoodsModel.ets
/**
* 表示商品详细数据的类型,是嵌套类的第三层
* @class
*/
@Observed
export class ThirdGoodsItem {
imgSrc: Resource; // 商品图片
price: string; // 商品价格
constructor(imgSrc: Resource, price: string) {
this.imgSrc = imgSrc;
this.price = price;
}
}
/**
* 表示商品列表的类型,是嵌套类的第二层
* @class
*/
@Observed
export class SecondGoodsItemList {
itemList: Array<ThirdGoodsItem>;
constructor(imgSrc: Array<ThirdGoodsItem>) {
this.itemList = imgSrc;
}
}
/**
* 表示商品模型的类型,是嵌套类的首层
* @class
*/
export class FistGoodsModel {
itemList: SecondGoodsItemList;
constructor(itemList: SecondGoodsItemList) {
this.itemList = itemList;
}
}
- 自定义组件中用@ObjectLink修饰对应class实例。源码参考ProductView.ets
@Component
export default struct GoodViewStruct {
@Link model: FistGoodsModel;
build() {
Column() {
SecondViews()
}
}
}
@Component
struct SecondViews {
@ObjectLink data: SecondGoodsItemList
build() {
List() { ... }
}
}
@Component
struct ThirdView {
@ObjectLink item: ThirdGoodsItem
build() {
Column() { ... }
}
}
- 更新第三层嵌套class ThirdGoodsItem的数据,UI刷新。源码参考VariableWatchView.ets
this.itemList.forEach((item, index) => {
item.imgSrc = originItemList[index].imgSrc;
item.price = originItemList[index].price;
}
高性能知识点
本示例介绍使用@Observed装饰器和@ObjectLink装饰器来解决需要单独监听多层嵌套类对象属性的方案。
工程结构&模块类型
VariableWatchView // har类型
|---model
| |---GoodsModel.ets // 数据模型
|---view
| |---ProductView.ets // 视图层-场景列表页面
| |---VariableWatchView.ets // 视图层-场景主页面
模块依赖
不涉及
参考资料
@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化
HarmonyOS NEXT应用开发之多层嵌套类对象监听的更多相关文章
- Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听
原文:Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听 简单记录下android 盒子开发遥控器的监听 ,希望能帮到新入门的朋友们 不多说,直接贴代码 public cla ...
- 【java开发系列】—— 嵌套类与内部类
嵌套类与内部类在java中使用的很广泛,为了避免难以理解,这里用了几个小例子,说明它的用法. 嵌套类与内部类的结构如下图 静态嵌套类 静态嵌套类,是一种在类之外声明的嵌套类,由于是静态的,所以不经过初 ...
- JAVA 图形开发之计算器设计(事件监听机制)
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 前段时间刚帮同学用MFC写了个计算器,现在学到JAVA的图形开发,就试着水了一个计算器出来.(可以说 ...
- vue 路由缓存 路由嵌套 路由守卫 监听物理返回
最近开发vue项目,遇到的一些问题,这里整合一下,看到一些博客已经有写相关知识,然后自己再次记录一下. 这是关于vue路由相关比较常见的问题,以后遇到相关路由的问题,会不断更新这篇博客. 需求1:从填 ...
- ExtJs 学习之开篇(二) Observable 给类添加监听
html:代码 DOCTYPE html><html><head><meta charset="UTF-8"><title>I ...
- Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮
效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...
- C++ 嵌套类使用(一)
一.嵌套类 在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型.之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的 ...
- C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类
类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ...
- C++学习之嵌套类和局部类
C++学习之嵌套类和局部类 局部类 在一个函数体内定义的类称为局部类. 局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关.在定义局部类时需要注意:局部类 ...
- 类声明、类作用域、前向声明、this指针、嵌套类、PIMPL 技法 等
一.类声明 //类是一种用户自定义类型,声明形式: class 类名称 { public: 公有成员(外部接口) private: 私有 ...
随机推荐
- 【个人笔记】VirtualBox7+Debian11基础环境搭建
本文主要是对在最新的VirtualBox7上搭建Debian11的笔记记录,方便后续个人回顾,同时搭配对配置的浅析. sudoers配置 非root用户想要使用sudo命令,需要两个条件: 系统安装了 ...
- 崩溃bug日志总结1
目录介绍 1.1 java.lang.UnsatisfiedLinkError找不到so库异常 1.2 java.lang.IllegalStateException非法状态异常 1.3 androi ...
- Python简单程序设计(Average篇)
如题: 解题方式如下:
- Cesium之双屏联动实现
1. 概述 双屏联动是常见的一种地图开发需求,主要用于同时查看两个地图,进行对比查看,还有一种类似的需求叫"卷帘门"(map split) 双屏联动效果如下: 卷帘门的效果如下: ...
- WPF MVVM 集合内容更改时如何添加操作,触发通知
用过mvvm设计WFP程序的人都知道,在我们mvvm中有一个非常重要的接口叫做 INotifyPropertyChanged 这个接口的主要作用是用于触发属性更改时向我们xaml中绑定此属性值的控件发 ...
- 大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望—打造AI应用新篇章
大模型落地实战指南:从选择到训练,深度解析显卡选型.模型训练技.模型选择巧及AI未来展望---打造AI应用新篇章 0.前言大模型发展史 早期阶段(1950s~1980s) 在1950年代初期,人们开始 ...
- KingbaseES V8R6 运维系列 --单机小版本升级
案例说明: 在KingbaseES V8R6版本提供了sys_upgrade的升级工具, 本案例描述了KingbaseES V8R6单机环境下数据库的小版本升级操作,案例涉及的版本从'(Kingb ...
- Book-Riscv-XV6-Chap1
操作系统接口 – 阅读 xv6-riscv-book Xv6的时钟周期:定时器芯片两次中断之间的时间 xv6作为一个简单的操作系统,利用一个"内核kernel"向其他运行中的程序提 ...
- 最大堆(MaxHeap)
性质 二叉堆是一颗完全二叉树,而完全二叉树是把元素排列成树的形状. 堆中某个节点的值总不大于其父节点的值最大堆(相应的可以定于最小堆) // 返回完全二叉树的数组表示中,一个索引所表示的元素的父亲节点 ...
- iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一)
iNeuOS工业互联网操作系统,"低代码"表单开发应用过程(一) 目 录 1. 概述... 2 2. "低代码"表单开发应用过程 ...