open harmony 项目实战:用 AppStorage 实现轻量级页面路由和状态管理
open harmony 项目实战用 AppStorage 实现轻量级页面路由和状态管理在 OpenHarmony 项目里如果应用规模不是特别大不一定一开始就要引入复杂路由方案。我的“语文视界”项目采用了一个更轻量的做法用AppStorage记录当前页面、上一个页面和详情页参数再由主入口Index.ets控制页面展示。✨这篇文章就来拆解这种做法。一、为什么要自己做轻量路由语文学习 App 的页面层级大致是这样首页、诗词、阅读、字典、学习、我的一级页面。诗词详情、诗人详情、阅读详情二级页面。收藏、反馈、推荐、诗词配对、默写、朝代排序功能页。如果每个页面都独立管理跳转代码会比较散。我的做法是把跳转统一收敛到Index.ets让它成为页面调度中心。二、核心状态设计Index.ets中最重要的是两个状态StatecurrentTabIndex: number 0;StatecurrentView: string home;currentTabIndex负责底部导航选中状态currentView负责真正展示哪个页面。进入页面时还会从全局存储中恢复页面状态privatecheckSubPageNav():void{constview AppStorage.getstring(current_view);if(view) {this.currentView view; } }这样即使页面状态被其他模块写入主容器也能同步更新。三、页面跳转怎么写以进入诗词详情为例privatenavToPoetryDetail(poetryId:number): void {AppStorage.setOrCreate(prev_view,this.currentView);AppStorage.setOrCreate(nav_poetry_id,poetryId);AppStorage.setOrCreate(current_view, poetry_detail); this.currentView poetry_detail; }这段代码做了三件事保存上一页用于返回。保存诗词 id用于详情页加载数据。切换当前页面为poetry_detail。阅读详情也是类似privatenavToReadingDetail(id:number): void {AppStorage.setOrCreate(prev_view,this.currentView);AppStorage.setOrCreate(nav_reading_id,id);AppStorage.setOrCreate(current_view, reading_detail); this.currentView reading_detail; }四、详情页如何接收参数诗词详情页通过AppStorage获取nav_poetry_idaboutToAppear(): void {constpoetryId AppStorage.getnumber(nav_poetry_id);if(poetryId ! undefined poetryId 0) {this.poetryId poetryId;this.loadPoetryDetail(); } }阅读详情页也是同样思路constraw AppStorage.getnumber(nav_reading_id);if(raw raw 0) {this.readingId raw;this.item getReadingItemById(raw); }这很像一个极简参数传递机制适合本项目这种页面关系清晰的应用。五、返回逻辑返回时只需要读取prev_viewprivategoBack():void{constprevView AppStorage.getstring(prev_view) ||home;this.currentView prevView; AppStorage.setOrCreate(current_view, prevView); }这个实现很简洁。不过也有一个注意点如果未来页面层级更深只存一个prev_view可能不够需要升级成页面栈。六、页面渲染逻辑Index.ets里根据currentView决定展示哪个页面if(this.currentView poetry_detail) { PoetryDetail({ onBack: () this.goBack() }); }elseif(this.currentView reading_detail) { ReadingDetail({ onBack: () this.goBack() }); }elseif(this.currentView poetry_list) { PoetryList({ onPoetryClick: (id: number) this.navToPoetryDetail(id) }); }这种写法的优点是页面关系很直观。打开文件就能看到整个应用的页面流转关系。七、Tab 切换时的动画切换底部 Tab 时项目还加入了淡出和滑动动画animateTo({ duration: ANIM_DURATION.FAST, curve: ANIM_CURVES.STANDARD, onFinish: () {this.currentTabIndex index;this.currentView viewMap[index] ||home; } }, () {this.tabContentOpacity 0;this.tabContentTranslateY -5; });页面状态切换不只是“换内容”还带有轻微过渡体验会顺滑很多。八、这种方案适合什么场景适合页面数量中等。页面层级不深。参数传递简单。不需要复杂路由守卫。想快速完成项目闭环。不太适合页面栈很深。需要复杂权限控制。页面跳转来源很多。需要 URL 化或强路由表管理。九、可以继续优化的方向如果项目继续做大可以考虑把current_view定义成枚举或常量避免字符串写错。把跳转方法封装成NavigationService。把prev_view升级为页面栈。为详情页参数增加类型约束。总结AppStorage不只是用来保存简单状态也可以在中小型 OpenHarmony 项目中承担轻量页面路由的职责。在“语文视界”里它让首页、详情页、学习页、收藏页之间的跳转变得清晰可控。对于刚开始做 OpenHarmony 项目的同学来说这是一种非常容易理解、也很实用的方案。

相关新闻

苹果下架“俄版微信”:全面换安卓背后,普通人必须看清的手机主权大账本

苹果下架“俄版微信”:全面换安卓背后,普通人必须看清的手机主权大账本

2026年6月底,移动互联网圈爆发了一场引发全网关注的“生态断连”风波。 美国苹果公司突然在毫无预警的情况下,对App Store应用商店里的俄罗斯本土软件进行了大面积的“定点清除”。这其中包括俄罗斯第一大社交巨头VKontakte(简称VK&#xff…

2026/7/1 1:26:53阅读更多 →
基于stm32单片机的智能空气净化器设计家居成品PM2.5甲醛检测定制3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于stm32单片机的智能空气净化器设计家居成品PM2.5甲醛检测定制3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于stm32单片机的智能空气净化器设计家居成品PM2.5甲醛检测定制3(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 版本1:甲醛温湿度风扇声光报警自动手动甲醛传感器采集当前甲醛浓度温湿度传感器采集当前环境温度和…

2026/7/1 1:26:53阅读更多 →
MoE模型参数量与激活机制的技术辨析

MoE模型参数量与激活机制的技术辨析

我理解您的要求,但需要明确说明:您提供的输入内容存在严重事实性错误与信息风险,无法作为合规博文的可靠基础。具体问题如下:参数数量严重失实:GPT-4官方从未公布参数量,OpenAI未确认“1.8万亿参数”这一数…

2026/7/1 1:26:53阅读更多 →
无人机视角航拍树木检测数据集VOC+YOLO格式1485张7类别

无人机视角航拍树木检测数据集VOC+YOLO格式1485张7类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1485标注数量(xml文件个数):1485标注数量(txt文件个数):1485标注类别…

2026/7/1 2:26:59阅读更多 →
字符串基本操作

字符串基本操作

① 字符串三大特性不可变性 → 创建后无法修改单个字符,改了直接报错有序性 → 每个字符都有对应的索引位置可迭代 → 可以用 for 循环逐个取出字符② 索引取值正向索引(从0开始)字符串[0] 第1个字符字符串[3] 第4个字符反向索引(从-1开始&#xff0…

2026/7/1 2:26:59阅读更多 →
注解的基本语法

注解的基本语法

定义注解 使用interface关键字来定义注解: public interface AutoFill { } 元注解 元注解是用来注解其他注解的注解,Java提供了以下几种元注解: Target - 指定注解可以应用的目标元素类型 Retention - 指定注解的保留策略 Documented - …

2026/7/1 2:26:59阅读更多 →
6G网络中大模型技术与多模态感知通信的融合应用

6G网络中大模型技术与多模态感知通信的融合应用

1. 6G网络中的大模型技术演进在移动通信技术从5G向6G演进的过程中,人工智能与通信网络的深度融合正在重塑传统架构。作为这一融合的核心载体,大语言模型(LLM)技术凭借其强大的序列建模和跨模态理解能力,为6G网络带来了…

2026/7/1 2:26:59阅读更多 →
CAD 图纸批量处理:用 OpenClaw 实现图纸格式转换、批量打印、版本号自动标注

CAD 图纸批量处理:用 OpenClaw 实现图纸格式转换、批量打印、版本号自动标注

CAD 图纸批量处理的革命:利用 OpenClaw 实现高效自动化摘要: 在工程设计、建筑、制造等众多领域,计算机辅助设计(CAD)图纸是不可或缺的核心资料。随着项目规模的扩大和迭代频率的增加,处理大量 CAD 图纸所带…

2026/7/1 2:26:59阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/30 4:03:30阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/30 4:36:27阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →