【HarmonyOS】关于官方推荐的组件级路由Navigation的心得体会

news2024/9/24 3:29:20

前言

最近因为之前的630版本有点忙,导致断更了几天,现在再补上。换换脑子。
目前内测系统的华为应用市场,各种顶级APP陆续都放出来beta版本了,大体上都完成了主流程的开发。欣欣向荣的气息。

学习思路

关于学习HarmonyOS的问题,很多同学私聊我说,因为没有白名单访问不了最新的API,目前API已经到12。这其实影响不大,HarmonyOS和OpenHarmony的接口我比对了下,现在基本功能和作用没有区别,可能某些系统api导包名字有区别,但这不影响,可以无缝切换。

可以通过这个链接,访问OpenHarmony开源的API接口文档等信息。

点击左上角的分支,来控制你看的API文档版本。目前最新的是5.0 Beta1 这和HarmonyOS是一致的。目前看华为的策略就是开源鸿蒙和商业鸿蒙版本一致管理。
在这里插入图片描述

标关于官方推荐的组件级路由Navigation的使用心得体会

最近经历了一次应用架构更新,对于路由的概念有了深刻的认识。从两年前开发OpenHarmony开始,基本都是使用router路由和window窗口来控制模块之间的切换。整个页面逻辑的控制非常耦合,并且笨重不变。

随着API的迭代更新,目前华为官方推荐使用Navigaiton来替换router。

Navigaiton这个东西,方便就方便于它的定位,组件级别。而我们的老东西router是页面级别。

  1. 灵活性一目了然,我们可以将页面一部分组件,进行路由控制切换。
  2. 并且我们可以对路由的删除进行管理,而router是没有remove只能替换,并且替换路由函数,是强制没有页面转场动画的效果。
  3. 最大的优势在于系统提供了自动扩容的容器控件,并且支持分栏效果,在折叠屏手机上的适配会非常方便。

Navigation如何使用?

首先Navigation是个容器,并不是直接对标router一样来使用的。我们可以理解成,这家伙是个变形金刚,它是由三部分组成,首先是主页面容器Navigation,其次是子页面容器NavDestination,之后才是对标router的操作对象NavPathStack

(1)创建主页界面



struct MainPage {
   message: string = 'Hello World';
  // 创建一个页面栈对象并传入Navigation
  pageStack: NavPathStack = new NavPathStack()

  build() {
    Navigation(this.pageStack) {
      // 页面布局
      Row() {
        Column() {
          Text(this.message)
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
            .onClick(()=>{
              // 跳转到子页面
              this.pageStack.pushDestination({
                name: "OnePage",
              }, false); //该false表示不需要转场动画,默认是有的
            })
        }
        .width('100%')
      }
      .height('100%')
    }
    // 分为三种模式,(默认)自动NavigationMode.Auto,单页面NavigationMode.Stack和分栏NavigationMode.Split
    .mode(NavigationMode.Stack)

  }
}

(2)创建子页界面


// 跳转页面入口函数

export function OnePageBuilder() {
  OnePage()
}



struct OnePage {
  private TAG: string = "OnePage";
   message: string = 'Hello World';
  pathStack: NavPathStack = new NavPathStack();

  build() {
    NavDestination() {
      Row() {
        Column() {
          Text(this.message)
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
        }
        .width('100%')
      }
      .height('100%')
    }.onShown(()=>{
      console.log(this.TAG, "OnePage onShown");
    })
     .onReady((context: NavDestinationContext) => {
         this.pathStack = context.pathStack;
    })
  }
}

(3)配置路由表
在这里插入图片描述

{
  "routerMap": [
    {
      "name": "OnePage",
      "pageSourceFile": "src/main/ets/pages/Navigation/OnePage.ets",
      "buildFunction": "OnePageBuilder",
      "data": {
        "description" : "this is PageOne"
      }
    }
  ]
}

特别注意的是,需要配置路由表的路径到module.json5里面,要不然跳转不了。
特别注意的是,需要配置路由表的路径到module.json5里面,要不然跳转不了。
特别注意的是,需要配置路由表的路径到module.json5里面,要不然跳转不了。主要的话说三遍!

  {
    "module" : {
      "routerMap": "$profile:route_map"
    }
  }

从API version 12开始,Navigation支持使用系统路由表的方式进行动态路由。各业务模块(HSP/HAR)中需要独立配置router_map.json文件,在触发路由跳转时,应用只需要通过NavPactStack提供的路由方法,传入需要路由的页面配置名称,此时系统会自动完成路由模块的动态加载、页面组件构建,并完成路由跳转,从而实现了开发层面的模块解耦。

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

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

相关文章

ApiFox或postman怎么用params类型传输json或集合+json的String类型

你是否碰见过这样的接口? post请求然后传输的参数都要和查询时一样以param形式传参数,那String什么的都好说,传就直接进后台了,那json呢,集合呢,是不是直接给你返400呢. 1.传json如何处理 那我们看看怎么实现,如果你要传json数据,那需要将特殊字符转义,也叫url转码,否则传不…

BeanUtils.copyProperties到底坑了多少人?

今儿我们就来梳理一下BeanUtils.copyProperties的坑点!! 一、坑点全解析 1. 类型不匹配 2. 属性命名差异 例如: 3. Boolean类型和is属性开头的坑 使用Lombok生成的getter方法时,如果Boolean类型的属性以is开头,Bea…

PHP工单预约表单系统小程序源码

🔧【高效办公新利器】工单预约表单系统大揭秘 💼【一键提交,工单管理新高度】 你还在为繁琐的工单提交流程头疼吗?工单预约表单系统,让你的工单管理步入高效时代!只需简单几步,填写必要信息&a…

Qt(四)事件

文章目录 一、概念二、(一)(二)QImage类(三)鼠标事件和键盘事件1. 鼠标事件2. 键盘事件 (四)定时器事件1. 采用定时器事件2. QTimer定时器类 三、 一、概念 事件是由窗口系统或者自…

Java getSuperclass和getGenericSuperclass

1.官方API对这两个方法的介绍 getSuperclass : 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。如果此对象表示一个数组类&#xff…

VSCode升级后不能打开在MacOS系统上

VSCode 在MacOS无法打开 版本 VSCode version: 1.91.0 (x64) 错误信息: MacBook-Pro ~ % /Users/mac/Downloads/FirefoxDownloads/Visual\ Studio\ Code.app/Contents/MacOS/Electron ; exit; [0710/142747.971951:ERROR:crash_report_database_mac.mm(753)] op…

做突破交易时,需要注意的进场细节有哪些?

突破交易揭示了市场未来的走向。 在这种情况下,面对市场时我们应该如何入场操作呢?接下来,让我们来细化一下实施的具体步骤。 01. 在交易中,周期的考量比价格突破更为关键。 当价格突破发生时,市场的平静被打破&#x…

编译执行JAVA含中文字符串文件,终端输出乱码问题处理

Date: 2024.07.10 20:42:07 author: lijianzhan 关于使用JDK21,编译执行JAVA含中文字符串文件,终端输出乱码怎么解决的问题,这篇文章将简单的描述一下问题,解决过程,结果。使用的解决方式是使用IDEA编辑器中的运行调试配置&#…

位运算在数据库中的运用实践-以MySQL和PG为例

目录 前言 一、两种不同的数据库设计 1、状态字段存储JSON 2、使用位运算 二、数据库中的位运算实践 1、MySQL中的位运算实践 2、PostgreSQL中位运算实践 三、总结 前言 最近在解决某用户的一个业务需求时,遇到一个很有意思的场景。首先先跟大家分享一下需求…

ts语法---泛型和泛型约束

泛型 泛型,动态类型,是一个初始化不明确的类型,类似于函数中的形参(不明确参数值), 泛型一般用在function定义函数时动态约束类型,和type定义类型时动态约束类型, 泛型一般使用任…

中小学校园EasyCVR视频综合监管方案:构建安全、智能的校园环境

一、背景需求分析 随着科技的快速发展,校园安全问题日益受到社会各界的关注。尤其是在中小学校园中,学生的安全更是牵动着每一个家庭的心。为了更有效地保障学生的安全,提高校园安全管理水平,视频监控系统在中小学中的应用越来越…

1.10编程基础之简单排序--02:奇数单增序列

OpenJudge - 02:奇数单增序列http://noi.openjudge.cn/ch0110/02/ 描述 给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。 输入 共2行: 第1行为 N; 第2行为 N 个正整数,其间用空格间隔。 输出 增序输出的奇数序列,数据之间以逗号间隔。数…

华为od100问持续分享-1

我是一名软件开发培训机构老师,我的学生已经有上百人通过了华为OD机试,学生们每次考完试,会把题目拿出来一起交流分享。 重要:2024年5月份开始,考的都是OD统一考试(D卷),题库已经整…

GDidees CMS v3.9.1 本地文件泄露漏洞(CVE-2023-27179)

前言 CVE-2023-27179 是一个影响 GDidees CMS v3.9.1 及更低版本的任意文件下载漏洞。这个漏洞存在于 /_admin/imgdownload.php 文件中,攻击者可以通过向 filename 参数传递恶意输入来下载服务器上的任意文件。 漏洞的根源在于对用户输入的 filename 参数处理不当…

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。 一、 前端界面需要展现多个表的其中几个数据的多表查询。1. 三个表查询其中字段返回:(用一下sql语句&#xff…

scipy库中,不同应用滤波函数的区别,以及FIR滤波器和IIR滤波器的区别

一、在 Python 中,有多种函数可以用于应用 FIR/IIR 滤波器,每个函数的使用场景和特点各不相同。以下是一些常用的 FIR /IIR滤波器应用函数及其区别: from scipy.signal import lfiltery lfilter(fir_coeff, 1.0, x)from scipy.signal impo…

数据结构——约瑟夫环C语言链表实现

约瑟夫环问题由古罗马史学家约瑟夫(Josephus)提出,他参加并记录了公元66—70年犹太人反抗罗马的起义。在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。起义者表示“宁为玉碎不为瓦全”,约瑟夫则想“留得青…

服务器提交记录有Merge branch消除

背景:在共同开发分支release上,你提交了commit,push到服务器上时,发现有人先比你push了,所以你得先pull, 后再push,然而pull后自动产生了一个Merge branch的一个commit,这个commit本…

Floyd算法——AcWing 343. 排序

目录 Floyd算法 定义 运用情况 注意事项 解题思路 基本步骤 AcWing 343. 排序 题目描述 运行代码 代码思路 改进思路 Floyd算法 定义 Floyd算法,全称Floyd-Warshall算法,是一种用于解决图中所有顶点对之间的最短路径问题的动态规划算法。…