HarmonyOS鸿蒙开发实战(5.0)自定义路由栈管理

鸿蒙HarmonyOS NEXT开发实战往期文章必看(持续更新......)

HarmonyOS NEXT应用开发性能实践总结

HarmonyOS NEXT应用开发案例实践总结合集

最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)

非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!


介绍

本案例将介绍如何使用路由跳转返回时获取到来源页的模块名以及路径名,在实际场景中同一页面通常会根据不同来源页展示不同的UI。

使用说明

无特殊使用说明,其他使用说明参考动态路由的相关说明

实现思路

路由来源页的实现

  1. 新增来源页字段
export class DynamicsRouter {...// 通过数组实现自定义栈的管理static routerStack: Array<RouterModel> = new Array();static referrer: string[] = [];...
}
  1. 注册路由
public static createRouter(router: NavPathStack): void {DynamicsRouter.navPathStack = router;// 初始化时来源页为未定义let homeRouterModule = new RouterModel();homeRouterModule.routerName = RouterInfo.HOME_PAGE[0];homeRouterModule.path = RouterInfo.HOME_PAGE[1];DynamicsRouter.routerStack.push(homeRouterModule)logger.info(`DynamicsRouter create routerStack Home is: ${homeRouterModule.routerName} + ${homeRouterModule.path}`);
}
  1. 获取路由来源页面栈
public static getRouterReferrer(): string[] {return DynamicsRouter.referrer;
}
  1. 通过页面栈跳转到指定页面
public static async push(router: RouterModel): Promise<void> {const path: string = router.path;const routerName: string = router.routerName;let param: string = router.param;console.info('push', path, routerName);// TODO:知识点:通过动态import的方式引入模块,在需要进入页面时才加载模块,可以减少主页面的初始化时间及占用的内存await import(routerName).then((ns: ESObject) => {console.info('harInit');ns.harInit(path) },(ret: ESObject) => {console.info('import reason', ret);});// push前记录当前页面的名字DynamicsRouter.getRouter().pushPath({ name: routerName, param: param });// 自定义栈也加入指定页面DynamicsRouter.routerStack.push(router);let referrerModel: RouterModel = DynamicsRouter.routerStack[DynamicsRouter.routerStack.length - 2];DynamicsRouter.referrer[0] = referrerModel.routerName;DynamicsRouter.referrer[1] = referrerModel.path;logger.info(`From DynamicsRouter.routerStack push preview module name is + ${DynamicsRouter.referrer[0]}, path is ${DynamicsRouter.referrer[1]}`);
}
  1. 通过页面栈返回上一页
// 通过获取页面栈并pop
public static pop(): void {// pop前记录的来源页为当前栈顶let referrerModel: RouterModel = DynamicsRouter.routerStack[DynamicsRouter.routerStack.length - 1];DynamicsRouter.referrer[0] = referrerModel.routerName;DynamicsRouter.referrer[1] = referrerModel.path;logger.info(`From DynamicsRouter.routerStack pop preview module name is + ${DynamicsRouter.referrer[0]}, path is ${DynamicsRouter.referrer[1]}`);if (DynamicsRouter.routerStack.length > 1) {DynamicsRouter.routerStack.pop();} else {logger.info("DynamicsRouter.routerStack is only Home.");}// 查找到对应的路由栈进行popDynamicsRouter.getRouter().pop();
}

路由来源页的使用

  1. 在任意模块中使用DynamicsRouter.createRouter()创建路由,在路由创建时会将主页HomePage推入自定义路由栈,并给代表来源页的referrer 字段赋值。

  2. 获取路由来源页面栈,执行DynamicsRouter.getRouterStack()获得自定义路由栈,该方法和Navigation的路由栈原理一致,会在push和pop页面跳转 之前记录来源页并赋值给referrer。

高性能知识点

不涉及

工程结构&模块类型

routermodule                                  // har类型
|---constants
|   |---RouterConstants.ets                     // 常量类,用于配置动态路由跳转页面的名称和模块路径
|---model
|   |---RouterModel.ets                         // 路由信息类,用于存储路由的相关信息
|---router
|   |---DynamicsRouter.ets                      // 动态路由实现类 + 来源页面

模块依赖

不涉及

参考资料

不涉及

最后

小编在之前的鸿蒙系统扫盲中,有很多朋友给我留言,不同的角度的问了一些问题,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,因为体系杂乱无章,教授的人也多,无从选择。有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)路线、视频、文档用来跟着学习是非常有必要的。

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员

鸿蒙 NEXT 全栈开发学习笔记 希望这一份鸿蒙学习文档能够给大家带来帮助~

这份鸿蒙(HarmonyOS NEXT)包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。


 鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

2.视频教程+学习PDF文档

(鸿蒙语法ArkTS、TypeScript、ArkUI教程……)全球开发者的开源社区,开源代码

 纯血版鸿蒙全套学习文档(面试、文档、全套视频等)全球开发者的开源社区,开源代码

                   

鸿蒙APP开发必备

​​

总结

参与鸿蒙开发,你要先认清适合你的方向,如果是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简单来说就是:为了确保高效学习,建议规划清晰的学习路线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真实数据,告诉你3S相关专业本硕毕业生就业去向

本期推文将基于2015届-2023届3S相关专业毕业生&#xff08;包括本硕博所有毕业生&#xff09;的生源地、性别分布、行业岗位等数据进行分析&#xff0c;为各位同学提供一些参考&#xff0c;希望可以对各位同学的职业规划与有一定的帮助。 GIS开发资料分享https://www.wjx.cn/v…

10.Lab Nine —— file system-上

首先切换分支到fs git checkout fs make clean 预备知识 mkfs程序创建xv6文件系统磁盘映像&#xff0c;并确定文件系统的总块数&#xff0c;这个大小在kernel/param.h中的FSSIZE写明 // kernel/params.h #define FSSIZE 200000 // size of file system in blocks Make…

牛客小白月赛101

考点为&#xff1a;A题 滑动窗口、B题 栈、C题 找规律、D 差分、E 筛约数。C题可能会卡住&#xff0c;不过手搓几组&#xff0c;或者模拟几组规律就显而易见了 A&#xff1a; 思路&#xff1a; 无论去头还是去尾&#xff0c;最后所留下的数据长度一定为&#xff1a;n - k &am…

Dbt自动化测试实战教程

数据团队关键核心资产是给消费者提供可信赖的数据。如果提供了不被信任的数据&#xff0c;那么支持决策智能依赖于猜测和直觉。原始数据从不同来源被摄取智数据仓库&#xff0c;数据产品团队有责任定义转换逻辑&#xff0c;将源数据整合到有意义的数据产品中&#xff0c;用于报…

Redisson分布式锁的概念和使用

Redisson分布式锁的概念和使用 一 简介1.1 什么是分布式锁&#xff1f;1.2 Redisson分布式锁的原理1.3 Redisson分布式锁的优势1.4 Redisson分布式锁的应用场景 二 案例2.1 锁竞争案例2.2 看门狗案例2.3 参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff…

生活英语口语柯桥学英语“再确认一下“ 说成 “double confirm“?这是错误的!

在追求英语表达的过程中&#xff0c;我们常常会遇到一些看似合理实则错误的表达习惯。今天&#xff0c;我们就来聊聊一个常见的误区——“再确认一下”被误译为“double confirm”。 “再次确认”不是double confirm 首先&#xff0c;我们需要明确&#xff0c;“double confi…

Springboot2笔记核心技术——1.基础入门

目录 1.spring和springboot的区别 1. 框架 vs. 工具 2. 配置方式 3. 启动方式 4. 项目结构 5. 生态系统 2.SpringBoot2入门 1. 创建项目 2. 项目结构 3. 编写主类 4. 添加Controller 5. 配置应用 6. 启动应用 7. 测试应用 8. 进一步学习 3.了解自动配置原理 1…

R 语言 | 取数据框一列子集时,如何保持数据框结构?drop=F

数据框取多列时&#xff0c;返回的还是数据框。 取一列时&#xff0c;默认退化为一个向量&#xff1a; > class(iris) [1] "data.frame" > t1iris[, 1:2] > class(t1) [1] "data.frame"> t2iris[,1] > class(t2) [1] "numeric" …

2.1 HuggingFists系统架构(二)

部署架构 上图为HuggingFists的部署架构。从架构图可知&#xff0c;HuggingFists主要分为服务器(Server)、计算节点(Node)以及数据库(Storage)三部分。这三部分可以分别部署在不同的机器上&#xff0c;以满足系统的性能需求。为部署方便&#xff0c;HuggingFists社区版将这三部…

YOLOv9改进,YOLOv9主干网络替换为GhostNetV2(华为提出的轻量化架构)

摘要 摘要:轻量级卷积神经网络(CNN)专为移动设备上的应用而设计,具有更快的推理速度。卷积操作只能在窗口区域内捕捉局部信息,这限制了性能的进一步提升。将自注意力引入卷积可以很好地捕捉全局信息,但会极大地拖累实际速度。本文提出了一种硬件友好的注意力机制(称为 D…

CSP-S 2024 提高级 第一轮(初赛) 完善程序(2)

【题目】 CSP-S 2024 提高级 第一轮&#xff08;初赛&#xff09; 完善程序&#xff08;2&#xff09; (2)&#xff08;次短路&#xff09;已知一个n个点m条边的有向图G&#xff0c;并且给定图中的两个点s和t&#xff0c;求次短路&#xff08;长度严格大于最短路的最短路径&am…

TFTP协议

目录 一、TFTP协议概述 1.1 TFTP协议简介 1.2 TFTP协议特点 二、TFTP协议原理 2.1 TFTP协议工作流程 2.2 TFTP协议数据包格式 三、TFTP协议应用场景 3.1 网络设备配置文件传输 3.2 虚拟机镜像文件传输 3.3 IoT设备固件升级 四、TFTP协议优化方法 4.1 增加超时重传机…

深入理解Python中的数据结构:OrderedDict

目录 1. 前言 2. OrderedDict的基本概念 2.1 OrderedDict的创建 2.2 排序特性 2.3 比较OrderedDict和标准字典 3. OrderedDict的高级功能 3.1 元素的移动 3.2 重新排序 3.3 反转顺序 4. OrderedDict的性能表现 4.1 插入性能测试 4.2 读取性能测试 5. OrderedDict的…

数据结构之——队列

一、队列概述 队列是一种操作受限的线性表&#xff0c;其限制条件为允许在表的一端进行插入&#xff0c;而在表的另一端进行删除。插入的一端叫做队尾&#xff0c;删除的一端叫做队头。向队列中插入新元素的行为称为进队&#xff0c;从队列中删除元素的行为称为出队。例如军训的…

Java服务端开发中的API版本管理:从URI到Header的不同策略

Java服务端开发中的API版本管理&#xff1a;从URI到Header的不同策略 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在Java服务端开发中&#xff0c;API版本管理是一个重要而复杂的问题。随着业…

前端文件上传全过程

特别说明&#xff1a;ui框架使用的是蚂蚁的antd 这里主要是学习前端上传接口的传递参数包括前端上传之前对于代码的整理 一、第一步将前端页面画出来 源代码&#xff1a; /** 费用管理 - IT费用管理 - 费用数据上传 */ import { useState } from "react"; import {…

Leetcode 56.合并区间-Python

链接&#xff1a;56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff…

【基础知识】网络套接字编程

套接字 IP地址 port&#xff08;端口号&#xff09; socket&#xff08;套接字&#xff09; socket常见API //创建套接字 int socket(int domain, int type, int protocol); //绑定端口 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); //监听套接字…

Prometheus篇之利用promtool工具校验配置正确性

promtool工具 promtool是Prometheus的一个命令行工具&#xff0c;它提供了一些功能来帮助用户进行Prometheus配置文件&#xff08;如prometheus.yml&#xff09;的检查、规则检查和调试。 解释 promtool check config: 验证Prometheus配置文件的语法和设置。 promtool命令&…

【最基础最直观的排序 —— 选择排序算法】

最基础最直观的排序 —— 选择排序算法 选择排序算法是一种简单直观的排序算法。其基本思想是每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&a…