项目源码已开源(持续更新中~~): https://gitcode.com/nutpi/HarmonyosNextCaseStudyTutorial
项目演示
注意: 项目需要再真机或模拟器中运行, 否则会出现部分图片无法展示的问题
项目介绍
本项目是一个基于HarmonyOS Next的开发者学习手册应用,旨在帮助开发者系统地学习HarmonyOS开发知识。项目采用分级学习的方式,从基础到高级,逐步深入讲解HarmonyOS的开发技术和实践案例。
前四章主要讲解的是应用架构及相关内容讲解, 帮助开发者能够快速掌握当前这个应用
项目结构
├── AllCaseSource/ # 静态资源库目录
│ └── TestCase/ # 示例案例资源库
├── AppScope/ # 应用全局配置
├── entry/ # 主入口模块
│ ├── src/
│ │ ├── main/ # 主要源代码
│ │ │ ├── blogs/ # 博客Markdown文件
│ │ │ ├── ets/ # ArkTS源代码
│ │ │ ├── module.json5 # 模块配置
│ │ │ └── resources/ # 资源文件
│ │ ├── mock/ # 模拟数据
│ │ ├── ohosTest/ # 测试代码
│ │ └── test/ # 单元测试
├── hvigor/ # 构建工具配置
├── oh-package.json5 # 项目依赖配置
└── build-profile.json5 # 构建配置
主要目录说明
entry/src/main/ets/:应用的主要源代码目录
- Components/:公共组件
- common/:公共资源和工具
- entryability/:应用入口能力
- pages/:页面组件
- router/:路由配置
- type/:类型定义
- view/:视图组件
AllCaseSource/:静态资源库目录,每个子目录代表一个独立的案例或项目资源
- 目前包含 TestCase/ 作为示例案例资源库
- 未来将添加更多案例资源库
页面关系
页面导航结构
Index (主页)
├── BasicCaseList (萌新小白)
│ └── TestCase (案例详情)
├── AdvancedCaseList (登堂入室)
│ └── 案例详情页
├── HybridCaseList (进阶高手)
│ └── 案例详情页
└── BlogViewList (博客列表)
└── BlogDetail (博客详情)
主要页面说明
Index:应用首页,展示三个学习阶段入口
- 萌新小白:基础入门阶段
- 登堂入室:进阶学习阶段
- 进阶高手:高级功能开发阶段
BasicCaseList/AdvancedCaseList/HybridCaseList:各阶段的案例列表页面
- 展示该阶段的学习案例
- 点击案例可进入详情页面
BlogViewList:博客列表页面
- 支持卡片视图和列表视图两种展示方式
- 可通过按钮切换视图模式
BlogDetail:博客详情页面
- 使用 @luvi/lv-markdown-in 插件解析展示Markdown内容
静态资源库说明
项目使用了静态资源库的设计模式,将案例内容封装为独立的模块:
- 每个案例/项目都作为一个独立的静态资源库存放在
/AllCaseSource/
目录下 - 目前已有的
TestCase
是一个示例资源库 - 未来会在
/AllCaseSource/
中创建更多静态资源库,每个代表一个案例或项目 - 主应用通过路由和依赖引用这些静态资源库中的内容
静态资源库引用方式
在
oh-package.json5
中声明依赖:{ "dependencies": { "testcase": "file:../AllCaseSource/TestCase" } }
在路由配置中引用案例路径:
export const BasicCaseListRouter:CaseType[] = [ { caseName: '演示数据', desc: '演示数据随着项目需求而改变', articlePath: "Components/TestCase" }, // 更多案例... ];
Markdown解析功能
项目使用 @luvi/lv-markdown-in
插件解析和展示Markdown内容:
LvMarkdownIn({
context: getContext(), // 资源文件模式必填参数
loadMode: "rawfile",
rawfilePath: "blogs/test.md",
loadCallBack: {
success(r: LMICallBack) {
console.log("luvi-markdown-in > " + r.code, r.message)
},
fail(r: LMICallBack) {
console.error("luvi-markdown-in > " + r.code, r.message)
}
}
})
数据结构
项目定义了几个主要的数据类型:
RouterType:一级路由数据结构
export interface RouterType{ stage: string; // 阶段名称 desc: string; // 阶段描述 icon: string; // 阶段图标 routePath: string; // 二级页面路由路径 }
CaseType:案例数据结构
export interface CaseType { caseName: string; // 案例名称 desc: string; // 案例描述 articlePath: string; // 博文页面路由路径 }
BlogItem:博客数据结构
export interface BlogItem { id: number; // 博客ID title: string; // 博客标题 content?: string; // 博客内容 imageUrl: Resource | null; // 博客图片 date?: string; // 发布日期 }
注意事项
- 目前项目中的数据均为演示数据,将来会根据实际需求进行更新
- 静态资源库的设计允许灵活添加新的案例和项目,无需修改主应用的核心代码
- 使用
@luvi/lv-markdown-in
插件需要确保Markdown文件放置在正确的资源目录中
4.对于博客资源及详情的数据结构目前还在准备中
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。