鸿蒙HarmonyOS教程-路由管理(Router)【入门篇】

篮之新喜  论坛元老 | 2024-6-28 18:25:18 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1851|帖子 1851|积分 5563

页面路由指在应用程序中实现不同页面之间的跳转和数据通报。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同一放在一个文件中做管理。

最后,为了能让各人更好的去学习提拔鸿蒙 (Harmony OS) 开发技术,小编连夜整理了一份30个G纯血版学习资料(含视频电子书学习文档等)以及一份在Github上持续爆火霸榜的《纯血版华为鸿蒙 (Harmony OS)开发手册》(共计890页),希望对各人有所帮助。
纯血版鸿蒙 HarmonyOS 4.0 视频学习资料



 需要以上视频学习资料小同伴
请点击→纯血版全套鸿蒙HarmonyOS学习资料

《纯血版华为鸿蒙 (Harmony OS)开发手册》

这份手册涵盖了当前鸿蒙 (Harmony OS) 开发技术必掌握的核心知识点
纯血版鸿蒙 (Harmony OS)开发手册部门精彩内容

HarmonyOS 概念:


  • 系统定义
  • 技术架构
  • 技术特性
  • 系统安全


如何快速入门?


  • 根本概念
  • 构建第一个ArkTS应用
  • 构建第一个JS应用
  • ……

开发基础知识: 


  • 应用基础知识
  • 配置文件
  • 应用数据管理
  • 应用安全管理
  • 应用隐私保护
  • 三方应用调用管控机制
  • 资源分类与访问
  • 学习ArkTS语言
  • ……

基于ArkTS 开发


  • Ability开发
  • UI开发
  • 公共变乱与通知
  • 窗口管理
  • 媒体
  • 安全
  • 网络与链接
  • 电话服务
  • 数据管理
  • 后台任务(Background Task)管理
  • 装备管理
  • 装备使用信息统计
  • DFX
  • 国际化开发
  • 折叠屏系列
  • .……

获取以上文中提到的这份纯血版鸿蒙 (Harmony OS) 开发资料的小同伴 
请点击→纯血版全套鸿蒙HarmonyOS学习资料

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表