当前位置: 首页 > news >正文

arkTs:鸿蒙开发中使用模型(Model)类封装数据与方法

鸿蒙开发中使用模型(Model)类封装数据与方法

  • 1.鸿蒙开发中为什么要使用模型(Model)类封装数据与方法
  • 2.定义接口:明确数据结构
    • 2.1 接口的作用
    • 2.2 接口的作用-----代码A
  • 3.使用 class 构建模型类
    • 3.1 封装方法
    • 3.2 使用 class 构建模型类-----代码B
  • 4.在鸿蒙 ArkUI 中使用模型类
    • 4.1 展示UI效果-----代码C
  • 5.运行效果截图
  • 6.结语
  • 7.定位日期

1.鸿蒙开发中为什么要使用模型(Model)类封装数据与方法

在鸿蒙 ArkTS 开发中,我们常常需要在 UI 中展示结构化数据,比如“图标 + 文本 + 数量”等组合。
许多初学者直接使用普通对象 {} 来表示这些数据,但在项目复杂后,这种方式会带来维护困难。

本文将介绍一种更规范的做法:使用接口(interface)+ 类(class)搭建模型(Model)结构,并在类中封装方法,使数据更清晰、更可复用。

  • 为什么推荐使用模型类
    在鸿蒙开发中,使用 Model 类 来封装数据与逻辑是一种非常推荐的做法
优势点说明
✅ 类型安全interface + class 提供静态类型检查
✅ 默认值防止 undefined 报错
✅ 逻辑封装数据操作集中在类中
✅ 易维护后期修改字段或逻辑只需改模型
✅ 可扩展模型可继续继承或增加方法
✅ 结构清晰UI 层仅关心显示,逻辑层由 Model 管理

2.定义接口:明确数据结构

2.1 接口的作用

  • 明确数据有哪些字段;

  • 定义字段的类型;

  • 让 编辑开发工具(如:DevEco Studio、IDE等) 自动提示与类型检查;

  • 避免拼写错误、类型不符等问题。

2.2 接口的作用-----代码A

  • 首先我们定义一个接口 iconStr,用于描述数据的结构:
/*** 图标 + 说明 的自定义组件模型接口* -----------------------------------------------------* 这里定义了一个基础数据结构,用于描述一个图标组件* 包含图标的说明文字、emoji 图标、图片资源以及数量等。*/
export interface iconStr {name: string // 图标文字说明,例如 "点赞"iconStr?: string // 可选的 emoji 图标,例如 "💡"、"👍"imageStr?: ResourceStr // 可选的图片资源(可以放项目资源ID)nameNum?: number // 可选数量属性,例如点赞数、收藏数等
}

3.使用 class 构建模型类

3.1 封装方法

封装方法的意义:

  • 逻辑内聚:与数据相关的操作写在类中;

  • 统一管理:不同组件复用相同逻辑;

  • 安全性高:防止外部乱改数据;

  • 可扩展:后期新增行为时,不影响外部使用。

3.2 使用 class 构建模型类-----代码B

文本路径:entry/src/main/ets/model/iconStrModel.ets

在这里插入图片描述
② 补充说明:文件index.ets内容如下

/*** 模型导航页*/export * from "./iconStrModel"

在接口基础上,我们创建一个类 iconStrModel 来实现接口,并封装逻辑。

运行效果(方法及逻辑):

  • 初始显示:👍 点赞 (12)

  • “点赞 +1”:数量自动加 1;

  • “重置数量”:恢复为 0。

/*** 图标 + 说明 的自定义组件模型接口* -----------------------------------------------------* 这里定义了一个基础数据结构,用于描述一个图标组件* 包含图标的说明文字、emoji 图标、图片资源以及数量等。*/
export interface iconStr {name: string // 图标文字说明,例如 "点赞"iconStr?: string // 可选的 emoji 图标,例如 "💡"、"👍"imageStr?: ResourceStr // 可选的图片资源(可以放项目资源ID)nameNum?: number // 可选数量属性,例如点赞数、收藏数等
}/*** 图标 + 说明 的模型类* -----------------------------------------------------* class 实现 interface,可以扩展逻辑。* 通过类封装数据和方法,既能约束结构,又能拥有功能行为。*/
export class iconStrModel implements iconStr {// ✅ 字段初始化,确保默认值存在(避免 undefined 报错)name: string = "" // 默认空字符串iconStr?: string = undefinedimageStr?: ResourceStr = undefinednameNum?: number = 0/*** 构造函数* -----------------------------------------------------* 通过传入一个符合 iconStr 接口的数据对象来实例化模型。* 使用 ?? 运算符给 nameNum 设置默认值 0(防止 undefined)。*/constructor(model: iconStr) {this.name = model.namethis.iconStr = model.iconStrthis.imageStr = model.imageStrthis.nameNum = model.nameNum ?? 0// 👆 "??" 是空值合并运算符:// 如果 model.nameNum 为 null 或 undefined,就用默认值 0;// 如果 model.nameNum 是 0,则保持 0 不变。}/*** 方法一:数量增加* -----------------------------------------------------* 逻辑:每次调用让数量递增(默认 +1,可自定义步长)*/increaseCount(num: number = 1) {this.nameNum! += num// "!" 是非空断言,告诉编译器这里一定有值。}/*** 方法二:返回显示格式* -----------------------------------------------------* 通过 getter 计算属性拼接展示文字,例如:* "👍 点赞 (12)"* 如果没有 iconStr,则自动忽略 emoji。*/get displayName(): string {return `${this.iconStr ?? ""} ${this.name} (${this.nameNum})`// 👆 "??" 用于避免 iconStr 为 undefined 时拼出 "undefined 点赞"}/*** 方法三:重置数量* -----------------------------------------------------* 让数量归零,常用于“清空”或“重置”操作。*/resetCount() {this.nameNum = 0}
}

4.在鸿蒙 ArkUI 中使用模型类

根据自己需要设置展示页的布局,然后调用模型方法

文件路径:entry/src/main/ets/pages/Index.ets

在这里插入图片描述

4.1 展示UI效果-----代码C

运行效果(方法及逻辑):

  • 初始显示:👍 点赞 (12)

  • 点击 “点赞 +1”:数量自动加 1;

  • 点击 “重置数量”:恢复为 0。

/*** 图标 + 数量 显示组件示例页* -----------------------------------------------------* 这里演示了如何在 ArkUI 页面中使用 iconStrModel。* 通过绑定 @State 修饰的模型实例,* UI 可以自动响应数据变化,实现“响应式更新”。*/
import { iconStr, iconStrModel } from '../model'@Entry
@Component
struct Index {/*** @State 修饰符* -----------------------------------------------------* 用于声明可响应式的状态变量。* 当 iconItem 的属性变化时(例如点赞数改变),* 页面上的 Text 会自动刷新显示。*/@State iconItem: iconStrModel = new iconStrModel({name: "点赞", // 图标说明文字iconStr: "👍", // emoji 图标nameNum: 12, // 初始数量} as iconStr)/*** 页面布局* -----------------------------------------------------* 由 Column、Row、Button、Text 组成的简单交互界面。*/build() {Column({ space: 10 }) {// 显示名称与数量Text(this.iconItem.displayName).fontSize(22).fontWeight(FontWeight.Bold)// 三个按钮操作逻辑Row({ space: 10 }) {// 按钮1:点赞 +1Button("点赞 +1").onClick(() => {this.iconItem.increaseCount()})// 按钮2:点赞 +2Button("点赞 +2").onClick(() => {this.iconItem.increaseCount(2)})// 按钮3:重置数量Button("重置数量").onClick(() => {this.iconItem.resetCount()})}}.padding(20)}
}

5.运行效果截图

在这里插入图片描述

6.结语

由于每个人的记忆力有限,为方便知识点的重启拾起而作此文。本文内容也比较简单,可当作记忆的锚点,一看就捡回来。

由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

7.定位日期

2025.10.16;
15:35

http://www.dtcms.com/a/491634.html

相关文章:

  • Ethernaut Level 11: Elevator - 接口实现攻击
  • 恶意软件行为图像数据集
  • 如何找到网站管理员做房产应看的网站
  • Profibus DP转Modbus RTU工业PLC网关赋能新能源电站高效协同运行
  • 免费网站建设 源代码哪些网站是做设计的
  • 第8篇:Jackson与Spring Boot:实战整合技巧
  • 整套网站建设视频教程淮北建设工程交易中心
  • F027 neo4j知识图谱音乐推荐系统vue+flask+知识图谱可视化+协同过滤推荐算法
  • 仪器网站模板打包wordpress为app
  • Java SPI 完整加载流程详解-JAR 包到类实例化
  • MySQL Workbench:MySQL官方管理开发工具
  • 七宝网站建设行业seo网站优化方案
  • Unity 光照贴图异常修复笔记
  • 算法训练之BFS解决最短路径问题
  • h5手机端网站开发西安软件开发公司
  • DataFrame对象的iterrows()方法
  • 【Java零基础·第8章】面向对象(四):继承、接口与多态深度解析
  • 网站规划建设与管理维护大作业中国传统文化网页设计
  • 空气能空调如何做网站做酒店网站多少钱
  • 小道消息:某国产数据库迁移中途失败
  • AI+量化 的数据类型有哪些
  • 外贸网站如何seo推广常用网站如何在桌面做快捷方式
  • 遇到的问题:缺少ClickTo Run Service
  • [创业之路-699]:企业与高校:模式错配的警示与适配路径的探索
  • 电脑做系统都是英文选哪个网站怎么做局域网网站
  • 源丰建设有限公司网站如何做推广最有效果
  • 合规守护经营,道本科技智慧合同管理系统助力小微企业迈入发展快车道[赞啊][赞啊][赞啊]
  • 站点推广是什么意思wordpress双语插件
  • LLMs-from-scratch :embeddings 与 linear-layers 的对比
  • 量化交易的思维导图