HarmonyOS NEXT鸿蒙开发:页面间跳转(页面路由router)

部署运行你感兴趣的模型镜像

说明

鸿蒙开发中,一个页面跳转到另一个页面,使用 Router 模块,与Vue、React框架有些类似

官网指南
官网API

应用场景

【登录】页面 -> 【首页】页面 -> 【我的】页面

跳转模式

Router模块提供了两种跳转模式:

  • router.pushUrl()
  • router.replaceUrl()

router.pushUrl()

目标页不会替换当前页,而是压入页面栈。这样可以保留当前页的状态

可以通过 返回键 或者调用 router.back() 方法返回到当前页

**应用场景:**通用

router.replaceUrl()

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

应用场景: 登录成功后,跳转到【首页】,使用该方式,点击后退,不会后退到【登录】页面

页面栈的最大容量

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

导入模块

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

import router from '@ohos.router';

router.pushUrl() 说明

跳转到应用内的指定页面。

api1

pushUrl(options: RouterOptions): Promise<void>

参数:

  • options:RouterOptions类型,必填项,跳转页面描述信息

RouterOptions

路由跳转选项,对象,有以下属性:

  • url:string类型,必填,表示目标页面的url,可以用以下两种格式:

  • 页面绝对路径,由配置文件中pages列表提供,例如:

    • pages/index/index

    • pages/detail/detail

  • 特殊值,如果url的值是"/",则跳转到首页。

  • params:object类型,表示路由跳转时要同时传递到目标页面的数据,切换到其他页面时,当前接收的数据失效。跳转到目标页面后,使用 router.getParams() 获取传递的参数,此外,在类web范式中,参数也可以在页面中直接使用,如this.keyValue(keyValue为跳转时params参数中的key值),如果目标页面中已有该字段,则其值会被传入的字段值覆盖。

案例一

有一个主页(Home)和一个详情页(Detail),希望从主页点击一个商品,跳转到详情页。同时,需要保留主页在页面栈中,以便返回时恢复状态。这种场景下,可以使用pushUrl()方法,并且使用Standard实例模式(或者省略)。

// 在Home页面中
function onJumpClick(): void {
  router.pushUrl({
    url: 'pages/Detail' // 目标url
  }, router.RouterMode.Standard, (err) => {
    if (err) {
      console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`);
      return;
    }
    console.info('Invoke pushUrl succeeded.');
  });
}
例子
router.pushUrl({
  url: 'pages/routerpage2',
  params: {
    data1: 'message',
    data2: {
      data3: [123, 456, 789]
    }
  }
})
  .then(() => {
    // success
  })
  .catch(err => {
    console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`);
  })

api2

pushUrl(options: RouterOptions, callback: AsyncCallback<void>): void

参数:

  • options:RouterOptions类型,必填,跳转页面描述信息。

  • callback:AsyncCallback<void> 类型,必填,异常响应回调。

例子
router.pushUrl({
  url: 'pages/routerpage2',
  params: {
    data1: 'message',
    data2: {
      data3: [123, 456, 789]
    }
  }
}, (err) => {
  if (err) {
    console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`);
    return;
  }
  console.info('pushUrl success');
});

router.replaceUrl() 说明

用应用内的某个页面替换当前页面,并销毁被替换的页面。不支持设置页面转场动效,如需设置,推荐使用Navigation组件。

api1

replaceUrl(options: RouterOptions): Promise<void>

参数:

  • options:RouterOptions类型,必填,跳转页面描述信息。
例子
router.replaceUrl({
  url: 'pages/detail',
  params: {
    data1: 'message'
  }
})
  .then(() => {
    // success
  })
  .catch(err => {
    console.error(`replaceUrl failed, code is ${err.code}, message is ${err.message}`);
  })

api2

replaceUrl(options: RouterOptions, callback: AsyncCallback<void>): void

参数:

  • options:RouterOptions类型,必填,跳转页面描述信息。

  • callback:AsyncCallback<void> 类型,必填,异常响应回调。

例子
router.replaceUrl({
  url: 'pages/detail',
  params: {
    data1: 'message'
  }
}, (err) => {
  if (err) {
    console.error(`replaceUrl failed, code is ${err.code}, message is ${err.message}`);
    return;
  }
  console.info('replaceUrl success');
});

实例模式

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

  • Standard:标准实例模式,也是默认情况下的实例模式。每次调用该方法都会新建一个目标页,并压入栈顶。

  • Single:单实例模式。即如果目标页的url在页面栈中已经存在同url页面,则离栈顶最近的同url页面会被移动到栈顶,并重新加载;如果目标页的url在页面栈中不存在同url页面,则按照标准模式跳转。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值