HarmonyOS实战开发之HMRouter实现跳转

简介: 本文介绍了HarmonyOS页面跳转的两种方式:组件导航(Navigation)和页面路由(@ohos.router),并推荐使用更灵活的组件导航。进一步详细讲解了HMRouter,一个解决HarmonyOS页面跳转问题的框架,其功能包括页面跳转、弹窗提示、转场动效等。通过下载依赖、配置插件、初始化和实现跳转四个步骤,可以轻松集成HMRouter,实现高效页面管理。文章还展示了具体代码示例和效果截图,帮助开发者快速上手。关注Feri,带你掌握鸿蒙开发技巧!

程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前!


0.前言

不知道大家在日常进行Harmony OS 的App开发的时候,对于页面跳转使用的都咋样,官方是提供了2种方式,分别是组件导航(Navigation)和页面路由(@ohos.router)

两者都是支持应用内的页面跳转,但组件导航支持在组件内部进行跳转,使用更灵活。组件导航具备更强的一次开发多端部署能力,可以进行更加灵活的页面栈操作,同时支持更丰富的动效和生命周期。

因此,推荐使用组件导航(Navigation)来实现页面跳转以及组件内的跳转,以获得更佳的使用体验。

但是我发现在使用组件导航的时候,的确有点麻烦,特别对于普通的项目而言,的确不是很好用,所以又找到了:HMRouter

1.HMRouter是什么呢

HMRouter是HarmonyOS上页面跳转的场景解决方案,主要解决应用内原生页面间相互跳转的问题。

HMRouter路由框架的功能特性,如下所示:

  1. 使用自定义注解实现路由跳转
  2. 支持HAR/HSP
  3. 支持路由拦截、路由生命周期
  4. 简化自定义动画配置:配置全局动画,单独指定某个页面的切换动画
  5. 支持不同的页面类型:单例页面、Dialog页面

当然了HMRouter主要可以实现以下功能:

1.实现页面跳转,主要包括:页面跳转与返回、多次页面跳转,返回指定页面、应用未登录,点击跳转登录页的校验、实现单例页面的跳转等效果。

2.弹窗提示,主要包括:实现弹窗类型的页面、返回时弹窗,提示用户是否确认返回、返回时弹窗,提示用户是否确认返回等功能的实现。

3.转场动效,主要包括:全局自定义转场动效、特定页面设置自定义转场、根据条件呈现不同转场动效、交互式转场等。

4.数据加载,主要是以下几点:数据请求预加载,与页面跳转并行化、页面重开数据恢复等。

5.维测场景,主要包括:页面埋点开发的实现。

2.HMRouter使用步骤

2.1 下载依赖

打开终端,执行下面的命令,进行下载:

ohpm install @hadss/hmrouter

2.2 配置路由编译插件

在项目的 hvigor/hvigor-config.json 文件中添加依赖 @hadss/hmrouter-plugin 内容如下所示:

"dependencies": {
    "@hadss/hmrouter-plugin": "^1.0.0-rc.10"
  },

ps:版本号请看上一步显示的版本号哈,一致哟!

2.3 在模块中引入路由编译插件

修改hvigorfile.ts

内容如下所示:

import { hapTasks } from '@ohos/hvigor-ohos-plugin';
import { hapPlugin } from '@hadss/hmrouter-plugin'; //引入HMRouter的插件
export default {
    system: hapTasks, 
    plugins:[hapPlugin()]   //配置插件
}

ps:注意如果项目使用的hap就用 hapPlugin,那么如果使用的 har就需要使用 harPlugin插件,你记住了吗?

2.4 HMRouter实现跳转

接下来就可以开开心心的使用HMRouter进行页面的跳转啦。那么详细的步骤如下所示:

0.准备2个页面,分别是Test1和Test2

1.在EntryAbility中实现初始化

一般都是在onCreate中实现初始化

具体代码如下所示:

import { HMRouterMgr } from '@hadss/hmrouter'; //导入
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: 
  AbilityConstant.LaunchParam): void {
    this.context.getApplicationContext()
    .setColorMode(ConfigurationConstant.
    ColorMode.COLOR_MODE_NOT_SET);
    //HMRouter的初始化
    HMRouterMgr.init({
      context: this.context
    })
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }
  ……
  }

2.在首页中定义入口首页是Index页面,实现如下的配置,主要是四步:

第一步:导入

第二步:自定义导航属性

第三步:实现HMNavigation容器配置

第四步:实现页面跳转

完整代码如下所示:

//1.导入
import { HMDefaultGlobalAnimator,HMNavigation,HMRouterMgr  } from '@hadss/hmrouter';
import { AttributeUpdater } from '@kit.ArkUI'
import { hilog } from '@kit.PerformanceAnalysisKit';
@Entry
@Component
struct Index {
  @State message: string = '程序员Feri,首页';
  //导航
  modifier: NavModifier = new NavModifier();
  build() {
    Column(){
      // 3.实现HMNavigation容器配置
      HMNavigation({
        navigationId: 'main', options: {
          standardAnimator: HMDefaultGlobalAnimator.STANDARD_ANIMATOR,
          dialogAnimator: HMDefaultGlobalAnimator.DIALOG_ANIMATOR,
          modifier: this.modifier
        }
      }){
        Column() {
          Text(this.message)
            .fontSize(30)
            .fontWeight(FontWeight.Bold)
            .margin(20)
          //4.页面跳转
          Button("跳转测试页面").onClick(()=>{
            hilog.info(1000,"rmr","点击跳转了")
            HMRouterMgr.push({
              navigationId:"main",
              pageUrl:"test1"
            })
          })
        }
      }
    }
  }
}
/* 2.实现自定义导航属性*/
class NavModifier extends AttributeUpdater<NavigationAttribute> {
  initializeModifier(instance: NavigationAttribute): void {
    instance.mode(NavigationMode.Stack);
    instance.navBarWidth('100%');
    instance.hideTitleBar(true);
    instance.hideToolBar(true);
  }
}

3.页面中导入

在Index和Test1和Test2页面中分别导入

import { HMRouter,HMRouterMgr } from '@hadss/hmrouter'; //导入

4.页面中声明路径

为需要跳转的页面添加@HMRouter注解,并配置其中的pageUrl参数 在Test1和Test2都需要完成声明

@HMRouter({ pageUrl: 'test1' }) //定义本页路径

5.实现跳转

Button("跳转第二个页面").onClick(()=>{
        HMRouterMgr.push({
          pageUrl: "test2"
        })
      }).margin(20)

6.效果展示

首页:

第一个页面:


第二个页面:

点击跳转,可以看到第二个页面:

第一个页面的完整代码如下所示:

import { HMRouter,HMRouterMgr  } from '@hadss/hmrouter'; //导入
@HMRouter({ pageUrl: 'test1' }) //定义本页路径
@Entry
@Component
export struct Test1{
  build() {
    Column(){
      Text("程序员Feri,第一个页面").margin(10)
      Button("回到上一页").onClick(()=>{
        //回到上一页
        HMRouterMgr.pop({navigationId:"main"})
      }).margin(10)
      Button("跳转第二个页面").onClick(()=>{
        HMRouterMgr.push({
          pageUrl: "test2"
        })
      }).margin(20)
    }
  }
}

第二个页面的完整代码如下所示:

import { HMRouter,HMRouterMgr  } from '@hadss/hmrouter'; //导入
@HMRouter({ pageUrl: 'test2' }) //定义本页路径
@Entry
@Component
export struct Test2{
  build() {
    Column(){
      Text("程序员Feri,第二个页面").margin(10)
      Button("跳转到第一个页面").onClick(()=>{
        //跳转
        HMRouterMgr.push({
          pageUrl: "test1"
        })
        //回到上一页
        // HMRouterMgr.pop({navigationId:"main"})
      }).margin(20)
    }
  }
}

2.5 HMRouter页面跳转的方式

HMRouter实现页面跳转有3种方式,分别如下所示:

push :目标页面不会替换当前页,而是插入页面栈。可以使用pop实现页面的返回操作

replace:目标页面会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页

pop:返回页面栈的上一个页面,skipedLayerNumber页面返回的层级数量,默认为0,表示返回上一级,1表示跳过一级页面返回

好了,本篇就到这里啦,希望能对你有所帮助,关注我,带你起飞鸿蒙开发!

目录
相关文章
|
8天前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
179591 21
|
15天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
17天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
9439 24
|
21天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
5105 15
资料合集|Flink Forward Asia 2024 上海站
|
21天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
5天前
|
JSON 分布式计算 数据处理
加速数据处理与AI开发的利器:阿里云MaxFrame实验评测
随着数据量的爆炸式增长,传统数据分析方法逐渐显现出局限性。Python作为数据科学领域的主流语言,因其简洁易用和丰富的库支持备受青睐。阿里云推出的MaxFrame是一个专为Python开发者设计的分布式计算框架,旨在充分利用MaxCompute的强大能力,提供高效、灵活且易于使用的工具,应对大规模数据处理需求。MaxFrame不仅继承了Pandas等流行数据处理库的友好接口,还通过集成先进的分布式计算技术,显著提升了数据处理的速度和效率。
|
29天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
16天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
1247 74