当前位置: 首页 > news >正文

鸿蒙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

相关文章:

鸿蒙Harmony跨模块交互

1. 模块分类介绍 鸿蒙系统的模块一共分为四种,包括HAP两种和共享包两种 HAP(Harmony Ability Package) Entry:项目的入口模块,每个项目都有且只有一个。feature:项目的功能模块,内部模式和En…...

由浅到深认识Java语言(30):集合

该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…...

Python学习笔记(二)

一:异常: 1.1:异常处理: 1.2:异常捕获: 1.3:异常传递: 二:模块: 2.1:模块的定义: 2.2:模块的导入: 2.3&…...

5.域控服务器都要备份哪些资料?如何备份DNS服务器?如何备份DHCP服务器?如何备份组策略?如何备份服务器状态的备份?

(2.1) NTD(域控数据库)备份 (2.2)DNS备份 (2.3)DHCP备份 (2.4)组策略备份 (2.5)CA证书备份 (2.6)系统状态备份 (2.1)…...

TCP与UDP:网络协议的技术原理与要点

文章目录 1. TCP(传输控制协议)1.1 面向连接1.1.1 三次握手1.1.2 为什么需要三次握手?1.1.3 四次挥手1.1.4 为什么需要四次挥手? 1.2 可靠性1.3 有序传输1.4 流量控制1.5 拥塞控制 2. UDP(用户数据报协议)2…...

vue-office/docx插件实现docx文件预览

1.下包 //预览docx文件 npm install vue-office/docx vue-demi//如果是vue2.6版本或以下还需要额外安装 vue/composition-api2.引入 <template><div>//在src填入文档地址<VueOfficeDocx srchttp://...../xx.docx style"width:80%" rendered"re…...

STM32—控制蜂鸣器(定时器)

目录 1 、 电路构成及原理图 2 、编写实现代码 main.c tim_irq.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 定时器中断是利用定时器的计数功能&#xff08;向上计数或向下计…...

【React】使用 JSX 为 JavaScript 添加标签

使用 JSX 为 JavaScript 添加标签实际上是将 JSX 语法与 JavaScript 代码结合使用&#xff0c;以描述用户界面。JSX 允许你在 JavaScript 中编写类似 HTML 的结构&#xff0c;并最终由 React 库将其转换为真正的 DOM 元素。以下是将标签引入 JavaScript 以及将 HTML 转化为 JSX…...

Docker构建多平台(x86,arm64)构架镜像

这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…...

python爬虫基础-----运算符(第三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…...

Itextpdf电子签章

印章 印章是我国特有的历史文化产物&#xff0c;古代主要用作身份凭证和行驶职权的工具。它的起源是由于社会生活的实际需要。早在商周时代&#xff0c;印章就已经产生。如今的印章已成为一种独特的&#xff0c;融实用性和艺术性为一体的艺术瑰宝。传统的印章容易被坏人、小人…...

两台电脑简单的通信过程详解(经过两个路由器,不同网段)

一、eNSP拓扑图 二、配置4台电脑的IP地址、子网掩码、网关地址。 三、配置路由器 注意拓扑图的接口与本博客是否相符&#xff0c;判断以下命令中的ip是否需要修改。 1.AR1-接口对应IP <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进入0/0/0接口 [Huawei-GigabitE…...

Java基于微信小程序的助农扶贫系统的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#…...

RocketMq方便测试,提供一个controller的接口,支持拉取消息,查看消息内容

通过一个REST API接口动态地启动RocketMQ的消费者&#xff0c;并基于传入的参数&#xff08;topicName&#xff0c;filterExpression&#xff0c;consumerGroupId&#xff09;决定要监听哪些消息。在Spring Boot项目中&#xff0c;这通常不是推荐的做法&#xff0c;因为消息消费…...

win10 下Msys2编译FFmpeg的流程方法

安装Msys MSYS2官网 安装... 将\msys64\usr\bin加入环境变量 Mysy2中输入 pacman –Syu pacman –Su pacman -S git patch unzip pacman -S mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-yasm pacman -S mingw-w64-x86_64-SDL2 pacman -S mingw-w64-x86_6…...

用 Delphi 做 FTP 服务器以及如何配置防火墙

使用 Delphi 的 TIdFTPServer 这个控件&#xff0c;做一个 FTP 服务器很简单。可以直接拿官方提供的 FTP Server 的那个 Demo 程序来修改。 本文主要描述如何配置服务器端防火墙 网络环境&#xff1a; 1. 客户端在路由器后面&#xff0c;局域网&#xff1b; 2. 服务器端在路…...

《SQL必知必会第五版》第十四章(组合查询)挑战题

1. 编写 SQL 语句&#xff0c;将两个 SELECT 语句结合起来&#xff0c;以便从 OrderItems表中检索产品 ID&#xff08;prod_id&#xff09;和 quantity。其中&#xff0c;一个 SELECT 语句过滤数量为 100 的行&#xff0c;另一个 SELECT 语句过滤 ID 以 BNBG 开头的产品。按产品…...

elasticsearch+kibana安装部分问题:

1.elasticsearch启动问题&#xff1a; 如果elasticsearch开启https登录则第一次启动的时候需要前台启动&#xff0c;前台启动的时候会自己创建相应的token等登录信息,如果是后台启动则没有这些登录信息&#xff1a; ./elasticsearch ━━━━━━━━━━━━━━━━━━━…...

Python---常用的web框架

目录 Django创建Django项目启动Django项目引入APP视图函数例如纯文本JSON格式数据重定向渲染页面返回错误提示 FlaskPyramidTornado Django 特点&#xff1a;Django是一个全功能的Web框架&#xff0c;提供了许多内置的功能和工具&#xff0c;如ORM、表单处理、认证等。它的设计…...

Jenkins Docker 部署指南

Jenkins Docker 部署指南 本文档为您提供了在 Docker 容器中部署 Jenkins 的全面指南&#xff0c;使用的是阿里云的容器镜像服务。请仔细遵循以下步骤以确保成功设置。 前提条件 主机上安装了 Docker。拥有阿里云容器镜像服务的账户。 部署步骤 1. 登录阿里云容器镜像服务…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

构建Docker镜像的Dockerfile文件详解

文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...

CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found

Nginx1.24编译时&#xff0c;报LuaJIT2.x错误&#xff0c; configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…...

Web APIS Day01

1.声明变量const优先 那为什么一开始前面就不能用const呢&#xff0c;接下来看几个例子&#xff1a; 下面这张为什么可以用const呢&#xff1f;因为复杂数据的引用地址没变&#xff0c;数组还是数组&#xff0c;只是添加了个元素&#xff0c;本质没变&#xff0c;所以可以用con…...