首页 > 其他分享 >鸿蒙极速入门(五)-路由管理(Router)

鸿蒙极速入门(五)-路由管理(Router)

时间:2023-10-26 18:44:23浏览次数:39  
标签:err 鸿蒙 url 跳转 params router Router 极速 页面

页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。

一、基础使用

Router模块提供了两种跳转模式,分别是router.pushUrl()和router.replaceUrl()。这两种模式决定了目标页面是否会替换当前页。

  • router.pushUrl():目标页面不会替换当前页,而是压入页面栈。这样可以保留当前页的状态,并且可以通过返回键或者调用router.back()方法返回到当前页。
  • router.replaceUrl():目标页面会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。

注意:页面栈的最大容量为32个页面。如果超过这个限制,可以调用router.clear()方法清空历史页面栈,释放内存空间。

Router模块提供了两种实例模式,分别是Standard和Single。这两种模式决定了目标url是否会对应多个实例。

  • Standard:多实例模式,也是默认情况下的跳转模式。目标页面会被添加到页面栈顶,无论栈中是否存在相同url的页面。
  • Single:单实例模式。如果目标页面的url已经存在于页面栈中,则会将离栈顶最近的同url页面移动到栈顶,该页面成为新建页。如果目标页面的url在页面栈中不存在同url页面,则按照默认的多实例模式进行跳转。

在使用页面路由Router相关功能之前,需要在代码中先导入Router模块。

import router from '@ohos.router';

跳转示例

1.普通跳转

function onJumpClick(): void {
  router.pushUrl({
    url: 'pages/Detail' // 目标url
  });
}

2.带跳转模式和跳转结果

比如从其他页面,跳转到登录页面(全局唯一)

function onJumpClick(): void {
  router.pushUrl({
    url: 'pages/Detail' // 目标url
  }, router.RouterMode.Single, (err) => {
    if (err) {
      console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`);
      return;
    }
    console.info('Invoke pushUrl succeeded.');
  });
}

3.替换原页面

比如从启动页面跳转到首页,同时需要销毁启动页

function onJumpClick(): void {
  router.replaceUrl({
    url: 'pages/Profile' // 目标url
  });
}

4.带参数

在调用Router模块的方法时,添加一个params属性,并指定一个对象作为参数:

class DataModelInfo {
  age: number;
}

class DataModel {
  id: number;
  info: DataModelInfo;
}

function onJumpClick(): void {
  // 在Home页面中
  let paramsInfo: DataModel = {
    id: 123,
    info: {
      age: 20
    }
  };

  router.pushUrl({
    url: 'pages/Detail', // 目标url
    params: paramsInfo // 添加params属性,传递自定义参数
  }, (err) => {
    if (err) {
      console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`);
      return;
    }
    console.info('Invoke pushUrl succeeded.');
  })
}

在目标页面中,可以通过调用Router模块的getParams()方法来获取传递过来的参数。

const params = router.getParams(); // 获取传递过来的参数对象
const id = params['id']; // 获取id属性的值
const age = params['info'].age; // 获取age属性的值

页面返回

1.返回上一页

router.back();

2.返回到指定页面

router.back({
  url: 'pages/Home' // 指定url
});

3.返回到指定页面,并传递自定义参数信息。

router.back({
  url: 'pages/Home',
  params: {
    info: '来自Home页'
  }
});

4.目标页面中,在需要获取参数的位置调用router.getParams()方法即可,例如在onPageShow()生命周期回调中:

onPageShow() {
  const params = router.getParams(); // 获取传递过来的参数对象
  const info = params['info']; // 获取info属性的值
}

页面返回的特别说明

当使用router.back()方法返回到指定页面时,该页面会被重新压入栈顶,而原栈顶页面(包括)到指定页面(不包括)之间的所有页面栈都将被销毁。

如果使用router.back()方法返回到原来的页面,原页面不会被重复创建,因此使用@State声明的变量不会重复声明,也不会触发页面的aboutToAppear()生命周期回调。如果需要在原页面中使用返回页面传递的自定义参数,可以在需要的位置进行参数解析。例如,在onPageShow()生命周期回调中进行参数解析。

二、命名路由

为了支持组件化,HarmonyOS支持多HAP机制共享包机制

在开发中为了跳转到共享包中的页面,可以使用router.pushNamedRoute()来实现,也就是命名路由的方式。

示例

在想要跳转到的共享包页面里,给@Entry修饰的自定义组件命名:

// library/src/main/ets/pages/Index.ets
// library为新建共享包自定义的名字
@Entry({ routeName : 'myPage' })
@Component
struct MyComponent {
}

配置成功后需要在需要跳转的页面中引入命名路由的页面:

// entry/src/main/ets/pages/Index.ets
import router from '@ohos.router';
import 'library/src/main/ets/pages/Index' // 引入共享包library中的命名路由页面

@Entry
@Component
struct Index {
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Text('Hello World')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .margin({ top: 20 })
        .backgroundColor('#ccc')
        .onClick(() => { // 点击跳转到其他共享包中的页面
          try {
            router.pushNamedRoute({
              name: 'myPage',
              params: {
                data1: 'message',
                data2: {
                  data3: [123, 456, 789]
                }
              }
            })
          } catch (err) {
            console.error(`pushNamedRoute failed, code is ${err.code}, message is ${err.message}`);
          }
        })
    }
    .width('100%')
    .height('100%')
  }
}

其他

基于命名路由技术方案时,建议将路由URL统一放在一个文件中做管理。

标签:err,鸿蒙,url,跳转,params,router,Router,极速,页面
From: https://www.cnblogs.com/anywherego/p/17790103.html

相关文章

  • 鸿蒙极速入门(四)-通过登录Demo了解ArkTS
    ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。ArkTS在TS的基础上主要扩展了如下能力:基本语法:ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发框架中的系统......
  • 极速智能,创见未来——2023芯和半导体用户大会顺利召开
    高性能计算和人工智能正在形成推动半导体行业飞速发展的双翼。面对摩尔定律趋近极限的挑战,3DICChiplet先进封装异构集成系统越来越成为产业界瞩目的焦点。这种创新的系统不仅在Chiplet的设计、封装、制造、应用等方面带来了许多突破,同时也催生了全新的ChipletEDA平台,共同为创造下......
  • HarmonyOS鸿蒙原生应用开发设计- 流转图标
    HarmonyOS设计文档中,为大家提供了独特的流转图标,开发者可以根据需要直接引用。开发者直接使用官方提供的流转图标内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的图标侵权意外情况等,减少自主创作流转图标的工作量。当然,如果有个性化的自主又有能力创作的除......
  • 使用 content scripts 和 Vue Router 等技术在当前页面中注入和显示 Vue 单文件组件
    要在当前页面中注入和显示Vue单文件组件,您需要按照以下步骤操作:创建一个Vue项目:首先,确保您有一个Vue项目,包括您的Vue单文件组件以及相应的构建配置。将构建后的文件添加到插件目录:将Vue项目构建后生成的HTML、CSS和JavaScript文件添加到您的Chrome插件的目录中。编......
  • 鸿蒙极速入门(三)-TypeScript语言简介
    ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,需要先了解一下TS语言的基础知识。一、基础类型1.数字类型-number双精度64位浮点值。它可以用来表示整数和分......
  • HarmonyOS鸿蒙原生应用开发设计- 华为分享图标
    HarmonyOS设计文档中,为大家提供了独特的华为分享图标,开发者可以根据需要直接引用。开发者直接使用官方提供的华为分享图标内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的内容产生的侵权意外情况等,减少自主创作华为分享图标的工作量。当然,如果有个性化的自......
  • 鸿蒙极速入门(二)-开发准备和HelloWorld
    一、开发准备本篇博客基于的系统版本:华为官方HarmonyOS版本3.1、OpenHarmony版本4.0Beta开发语言ArkTS语言(推荐)JS语言(支持)Java语言(已放弃支持)从Harmony4.0开始,官方主推ArkTS语言,且不再支持Java语言UI框架-方舟开发框架(ArkUI框架)ArkUI框架介绍个人理解:类似iOS的......
  • FastAPI学习-10. 路由管理APIRouter
    前言在Flask中,我们一般用蓝图Blueprint来处理多个模块的视图,在fastapi中也有类似的功能通过APIRouter来管理。路由管理APIRouter如果你正在开发一个应用程序或WebAPI,很少会将所有的内容都放在一个文件中。FastAPI提供了一个方便的工具,可以在保持所有灵活性的同时构建你......
  • 鸿蒙极速入门(一)-HarmonyOS简介
    1、华为官网介绍2、OpenHarmony开源项目3、技术架构内核层内核子系统:采用多内核(Linux内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核驱动子系统:驱动框架(HDF)是系统硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。系统服务层系统服务层是Ope......
  • 【保姆级教学】抛弃QuickConnect,免费极速远程访问黑群辉、白群晖NAS
    相信很多使用群晖NAS的小伙伴都不满意群晖自带的QuickConnect远程访问,不是速度慢就是连不上,而且很多套件不支持QuickConnect,这里我将教大家如何使用免费的内网穿透工具来实现异地远程访问群晖NAS,而且支持所有的套件的远程访问,小白也能看懂。步骤1:注册并安装内网穿透工具Solopace.......