MVVM模式(V1)
介绍
本示例展示了MVVM模式的使用方法:
- 当开发者掌握了状态管理的基本概念后,通常会尝试开发自己的应用,在应用开发初期,如果未能精心规划项目结构,随着项目扩展和复杂化,状态变量的增多将导致组件间关系变得错综复杂。此时,开发新功能可能引起连锁反应,维护成本也会增加。为此,本示例旨在示例MVVM模式以及ArkUI的UI开发模式与MVVM的关系,给开发者予以参考,以便在产品迭代和升级时,能更轻松的开发和维护。;
- 在应用开发中,UI更新需要实时同步数据状态变化,这直接影响应用程序的性能和用户体验。为了解决数据与UI同步的复杂性,ArkUI采用了 Model-View-ViewModel(MVVM)架构模式。MVVM 将应用分为Model、View和ViewModel三个核心部分,实现数据、视图与逻辑的分离。通过这种模式,UI可以自动更新状态变化,从而更高效地管理数据和视图的绑定与更新。
效果展示
| @State实现备忘录演示 | @Prop和@Link实现备忘录演示 |
|---|---|
![]() |
![]() |
| ForEach实现备忘录演示 | @Builder实现备忘录演示 |
![]() |
![]() |
| Mvvm实现备忘录使用演示 | |
![]() |
使用说明
- 必须搭配 @Param:仅能与 @Param 共同使用,不可单独使用或与@State、@Local 等其它装饰器搭配,且仅支持@ComponentV2组件(API 12+)。
- 初始化仅同步一次:变量初始化时接收外部传入值,后续外部数据源变化时,子组件变量不再同步更新。
- 允许本地修改:解除@Param默认“不可本地修改”的限制,修改后可触发UI刷新,且不影响外部数据源。
工程目录
entry/src/
├── main
│ ├── ets
│ │ ├── entryability
│ │ ├── entrybackupability
│ │ ├── model
│ │ │ ├── ThingModel.ets
│ │ │ └── TodoListModel.ets
│ │ ├── pages
│ │ │ ├── BuilderIndex.ets
│ │ │ ├── ForEachIndex.ets
│ │ │ ├── Index.ets
│ │ │ ├── PropLinkIndex.ets
│ │ │ └── StateIndex.ets
│ │ ├── viewModel
│ │ │ ├── ThingViewModel.ets
│ │ │ └── TodoListViewModel.ets
│ │ └── view
│ │ │ ├── AllChooseComponent.ets
│ │ │ ├── ThingComponent.ets
│ │ │ ├── TodoComponent.ets
│ │ │ └── TodoListComponent.ets
│ ├── module.json5
│ ├── syscap.json
│ └── resources
│ │ ├── base
│ │ ├── dark
│ │ └── rawfile
│ │ └── default_tasks.json
└── ohosTest
└── ets
└── test
├── Ability.test.ets // 自动化测试代码
└── List.test.ets // 测试套执行列表
具体实现
- 搭建MVVM项目目录(model、viewModel、views、pages),并在 resources下创建default_tasks.json存储初始待办数据。
- 开发Model层:用ThingModel定义单条待办结构,TodoListModel实现从JSON读取数据的逻辑。
- 开发ViewModel层:ThingViewModel封装单待办操作(切换状态、加后缀),TodoListViewModel处理列表逻辑(加载数据、全选)。
- 开发View层:编写组件(标题、单待办、全选、列表),页面Index.ets组装组件并绑定ViewModel。
- 测试应用,确认数据加载正常、交互(切换状态、全选)时UI与ViewModel数据双向同步。
相关权限
不涉及。
依赖
不涉及。
约束与限制
-
本示例仅支持标准系统上运行, 支持设备:华为手机。
-
HarmonyOS系统:HarmonyOS 5.0.5 Release及以上。
-
DevEco Studio版本:6.0.0 Release及以上。
-
HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo ArkUISample/ArktsMvvmSample/ > .git/info/sparse-checkout
git remote add origin https://gitcode.com/harmonyos_samples/guide-snippets.git
git pull origin master




