当前位置: 首页 > 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

http://www.lryc.cn/news/325616.html

相关文章:

  • 由浅到深认识Java语言(30):集合
  • Python学习笔记(二)
  • 5.域控服务器都要备份哪些资料?如何备份DNS服务器?如何备份DHCP服务器?如何备份组策略?如何备份服务器状态的备份?
  • TCP与UDP:网络协议的技术原理与要点
  • vue-office/docx插件实现docx文件预览
  • STM32—控制蜂鸣器(定时器)
  • 【React】使用 JSX 为 JavaScript 添加标签
  • Docker构建多平台(x86,arm64)构架镜像
  • python爬虫基础-----运算符(第三天)
  • Itextpdf电子签章
  • 两台电脑简单的通信过程详解(经过两个路由器,不同网段)
  • Java基于微信小程序的助农扶贫系统的研究与实现
  • RocketMq方便测试,提供一个controller的接口,支持拉取消息,查看消息内容
  • win10 下Msys2编译FFmpeg的流程方法
  • 用 Delphi 做 FTP 服务器以及如何配置防火墙
  • 《SQL必知必会第五版》第十四章(组合查询)挑战题
  • elasticsearch+kibana安装部分问题:
  • Python---常用的web框架
  • Jenkins Docker 部署指南
  • 海外媒体宣发:商务视频推广数字化变革全解析-华媒舍
  • 文件服务: 功能介绍
  • php 快速入门(二)
  • java面试题|(1)多线程如何停止一个线程?
  • 使用阿里CICD流水线打包Java项目到阿里的docker镜像私仓,并自动部署到服务器启动服务
  • Mybatis的核心配置文件
  • 四川易点慧电子商务抖音小店:安全可靠,购物新选择
  • 基于数据沙箱与LLM用例自愈的UI自动化测试平台
  • 面试算法-117-组合总和 III
  • 邮件接口与第三方平台的集成的方式有哪些?
  • qrcode插件-生成二维码