鸿蒙Harmony跨模块交互

1. 模块分类介绍

鸿蒙系统的模块一共分为四种,包括HAP两种和共享包两种

HAP(Harmony Ability Package)

  • Entry:项目的入口模块,每个项目都有且只有一个。
  • feature:项目的功能模块,内部模式和Entry完全相同,就是不承担作为入口的功能。

共享包(共享包无法使用UIAbility和其他ExtentionsAbility,你可以近似理解成共享包不能使用Android的四大组件):

  • Harmony Archive(HAR):静态共享包,在每个引用他的模块里面都会复制一份自己的编译产物。跟随他的引用包一起编译。
  • Harmony Shared Package(HSP):动态共享包,在所有引用他的模块中,只会有一个他的编译产物。他可以自己编译。
    在这里插入图片描述

UIAbility类比就是Android四大组件中的Activity,而我们平时用的带@Entry标签的UI组件,可以理解为是Fragment或者说是View。
和Android不同的是,在鸿蒙系统中,UIAbility并不会像Activity中那样频繁被创建,我们一般都通过UI组件来进行页面的切换和跳转。

四种不同的包的区分方式,查看该module中的src/main/module.json5文件里面的type字段
在这里插入图片描述

2. 导入本地模块

导入模块要做三件事

  1. 如果是本地模块的话,你需要先创建该模块,new一个Module出来
  2. 在全局里面加入该模块,有三个不同的操作方式,效果都是一样的。
    • 在项目的oh-package.json5的dependencies中添加该模块,然后点击界面上方的sync。
      在这里插入图片描述

    • 直接在你需要的添加该模块的模块的oh-package.json5的dependencies中加入该模块,然后他会报错要你ohpm install该模块,照做即可。

    • 直接在终端执行ohpm install指令将模块加入。如目标模块的名称为HarLibrary,指令就为:ohpm install file:./HarLibrary。
      在这里插入图片描述

  3. 在目标模块中引用,也就是2.2中提到的在dependencies中添加即可引用。

3. 使用模块内的类

每个模块中的类,如果想要被其他模块调用的话,需要做以下两部

  1. 将该类声明为export。
    在这里插入图片描述
  2. 在该模块的Index.ets文件中,添加该类。
    在这里插入图片描述
    这样就可以被其他工程调用了。

4. 跳转模块内的Entry

如果我在共享包里面写了一个ArkUI,但是我又想在其他页面中通过跳转的方式打开的话该怎么办呢?

router.pushUrl此时的语法为:
'@bundle:包名(bundleName)/模块名(moduleName)/路径/页面所在的文件名(不加.ets后缀)'
其中,包名在项目的AppScope/app.json5文件中,
在这里插入图片描述
模块名就是你在dependences中引用时取的名字。
之后在编辑配置中,打开Deploy Multi Hap,然后勾选目标包即可
在这里插入图片描述在这里插入图片描述
必须要Build应用才能看效果,Preview是不行的。

其他方法

还有一个不算方法的方法,就是先将目标页面export出来之后,在需要使用该页面的模块中,通过一个空的Entry引用该模块来达成一个间接的打开页面的功能,如图。
在这里插入图片描述
之后只需要打开ModuleIndex,就相当于打开了MainPage,只能说如果正常跳转遇到了没办法解决的问题就用该办法吧。

参考资料

https://developer.huawei.com/consumer/cn/forum/topic/0208145626180602082

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在Semantic Kernel中使用Qdrant向量数据库

本文将介绍如何在Semantic Kernel中使用Qdrant向量数据库,并演示如何在Semantic Kernel中进行向量更新和查询操作。 1. 背景 在前一篇文章《Qdrant 向量数据库的部署以及如何在 .NET 中使用 TLS 安全访问》中,我们介绍了如何使用 Docker 部署 Qdrant 向…

Python私有属性和私有方法

私有属性和私有方法 在实际开发中,对象的某些属性或者方法只希望在对象内部被使用,而不希望在外界被访问。 私有属性:对象不希望公开的属性 私有方法:对象不希望公开的方法 定义方式:在属性名或者方法名前添加两个下划…

代理重加密+GO开源代码

目录 一、场景说明 二、代理重加密流程 三、具体原理 本地密钥生成​编辑 加密数据​编辑 生成代理重加密密钥​编辑 密钥代理重加密​编辑 重解密密钥​编辑S X_A 解密数据​编辑 四、开源代码 一、场景说明 一个数据方想要将数据发布到云服务器上进行数据共享&am…

VITIS更新硬件平台

VITIS硬件平台更新以后如何重新导入 在之前建立的硬件平台上右击,选择Update Hardware Specification,选择最新导出的硬件平台文件; 重建板级支持包 选择复位重建BSP源文件,然后Clean,再然后Build 参考连接

前端实例:页面布局2--Tab标签页切换(后端数据实现)

效果 index.php(数据库连接部分不写) <!DOCTYPE html> <html><head><style>.tab_pos {display: flex;justify-content: center;align-items: center;background-color: #fff;}/* 设置标签页外层容器样式 */.tab-container {width: 90%;background-col…

PyQt5:Python中最强大的GUI开发工具

目录 PyQt5简介 关键特性 优势 如何开始使用PyQt5 结论 在Python生态系统中&#xff0c;GUI&#xff08;图形用户界面&#xff09;应用程序的开发一直是一个热门话题。有许多工具和框架可供选择&#xff0c;但PyQt5被认为是Python中最强大的GUI开发工具之一。PyQt5是一个P…

ROS机器人虚拟仿真挑战赛学习笔记

仿真效果 146s录屏&#xff1a; ROS机器人虚拟仿真挑战赛rviz跟随base 103s录屏&#xff1a; ROS机器人虚拟仿真挑战赛rviz和gazebo 98s录屏&#xff1a; ROS机器人虚拟仿真挑战赛时间98秒总分65分 F1TENTH线上仿真赛&#xff0c;乃无人车竞速之盛事&#xff0c;以ROS机器人操…

力扣236、235、701、450

一、236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 1.1题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff…

C++ 3.25作业

1、定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转 #include <iostream>using namespace std;namesp…

MySQL--Buffer Pool

虽然说 MySQL 的数据是存储在磁盘里的&#xff0c;但是也不能每次都从磁盘里面读取数据&#xff0c;这样性能是极差的。为此&#xff0c;Innodb 存储引擎设计了一个缓冲池&#xff08;Buffer Pool&#xff09;&#xff0c;来提高数据库的读写性能。 有了缓冲池后&#xff1a; …

Go微服务实战——metrics指标监控(Prometheus框架与Grafana可视化)

安装Prometheus 参考官网 安装完后访问http://IP:9090如下所示&#xff1a; 这是Prometheus自带的UI。 该地址是数据监控地址http://localhost:9090/metrics所有输出的监控项。 可以正常浏览上述信息是表示安装完成。 Promethus简介 promethus中文网 Prometheus中文文档 …

分享5款能让电脑更高效的软件

​ 你想让你的电脑更好用吗&#xff1f;这里有五款电脑软件可以帮你&#xff0c;它们可以让你的电脑更高效、美观、安全&#xff0c;快来看看吧&#xff01; 1.远程协助——TeamViewer ​ TeamViewer是一款功能强大的远程桌面连接软件&#xff0c;支持跨平台操作&#xff0c;…

基于SSM+Jsp+Mysql的毕业生就业信息管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

牛客网BC-33 统计成绩(数组排序思想)

题目如下 --------------------------------------------------------------------------------------------------------------------------------- 思路&#xff1a;以数组形式输入&#xff0c;并将数组顺序&#xff08;或者逆序&#xff09;排序&#xff0c;最后输出最大值最…

静态代理与动态代理

静态代理与动态代理 静态代理 某个对象提供一个代理&#xff0c;代理角色固定&#xff0c;以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口&#xff0c;这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类…

在项目中数据库如何优化?【MySQL主从复制(创建一个从节点复制备份数据)】【数据库读写分离ShardingJDBC(主库写,从库读)】

MySQL主从复制 MySQL主从复制介绍MySQL复制过程分成三步&#xff1a;1). MySQL master 将数据变更写入二进制日志( binary log)2). slave将master的binary log拷贝到它的中继日志&#xff08;relay log&#xff09;3). slave重做中继日志中的事件&#xff0c;将数据变更反映它自…

基于GA优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 5…

JetBrains GoLand 2023---高效Go语言开发环境的首选工具【Mac/Windows】

JetBrains GoLand 2023是一款专为Go语言开发者设计的强大集成开发环境&#xff08;IDE&#xff09;。它提供了智能代码提示、自动补全和强大的调试工具&#xff0c;帮助开发者快速编写和调试Go语言代码。JetBrains GoLand 2023的功能特色主要表现在以下几个方面&#xff1a; 强…

万象奥科携手RT-Thread,线下体验RK3568混合部署!

3月21日&#xff0c;万象奥科联合RT-Thread在上海张江举办RK3568OpenAMP混合部署线下workshop&#xff0c;体验在一个SOC上的同时运行RT-Thread和Linux&#xff0c;为电力、医疗、工业控制、机器人、新能源等行业应用提供新思路。 万象奥科为伙伴们提供RK3568全功能开发板&…

flutter使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令&#xff0c;就需要知道对应的平台是windows还是linux&#xff0c;如果是windows就需要调用cmd命令&#xff0c;如果是linux平台&#xff0c;就需要调用sh命令&#xff0c;所以可以通过cfg!实现不同平台的判断&#xff0c;然后调用不同…