鸿蒙开发系列教程(十七)--路由Router

页面路由指在应用程序中实现不同页面之间的跳转和数据传递

1、页面跳转

跳转模式

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

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

页面实例模式

1.Standard:标准实例模式,每次跳转都会新建一个目标页并压入栈顶。默认就是这种模式
2.Single:单实例模式,如果目标页已经在栈中,则离栈顶最近的同Url页面会被移动到栈顶并重新并重新加载

​ 如:有一个设置页(Setting)和一个主题切换页(Theme),希望从设置页点击主题选项,跳转到主题切换页。同时,需要保证每次只有一个主题切换页存在于页面栈中,在返回时直接回到设置页,用single。

导入Router模块

import router from ‘@ohos.router’;

示例1: 由一个页面跳转到另一个页面

新建aaa.etc bbb.etc

配置路由文件resource/base/profile/main_pages.js:

{
  "src": [
    "pages/Index",
    "pages/aaa",
    "pages/bbb"   
  ]
}

aaa.etc源代码

import router from '@ohos.router';

@Entry
@Component
struct RouterTest012{
  build() {
    Column() {
      Button() {
        Text('我是主页,点击跳转内页')
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
      }
      .backgroundColor('red')
      .onClick(() => {
         Jumpfun()

      })
    }
  }
}

function Jumpfun(): void {
//router.RouterMode.Standard 可以省略
  router.pushUrl({
    url: 'pages/bbb'
  }, router.RouterMode.Standard, (err) => {
    if (err) {
      console.error(`错误代码: ${err.code},信息: ${err.message}`);
      return;
    }
    console.info('成功');
  });
}

bbb.etc源代码

@Entry
@Component
struct RouterTest022 {
  build() {
    Column() {
      Text("我是内页")
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
    }
  }
}

示例2:**从当前页面跳转到另一个页面,同时,销毁当前页面

function Jumpfun(): void {
router.replaceUrl({
url: ‘pages/bbb’
}, router.RouterMode.Standard, (err) => {
if (err) {
console.error(错误代码: ${err.code},信息: ${err.message});
return;
}
console.info(‘成功’);
});
}

2、路由参数

如果需要在跳转时传递一些数据给目标页,则可以在调用Router模块的方法时,添加一个params属性,并指定一个对象作为参数

传递参数

class DataModelInfo {
age: number;
}

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

function onJumpClick(): void {
let paramsInfo: DataModel = { id: 123, info: { age: 20 } };

router.pushUrl({
url: ‘pages/Detail’, // 目标url
params: paramsInfo // 添加params属性,传递自定义参数
}, (err) => {。。。})
}

接受参数

在Detail页面,可加到页面生命周期中:

onPageShow() {

​ const params = router.getParams(); // 获取传递过来的参数对象

​ const id = params[‘id’]; // 获取id属性的值

​ const age = params[‘info’].age; // 获取age属性的值

}

3、页面返回

当用户在一个页面完成操作后,通常需要返回到上一个页面或者指定页面,这就需要用到页面返回功能

1、返回到上一个页面

router.back();

上一个页面必须存在于页面栈中才能够返回,否则该方法将无效。

2、返回到指定页面。

router.back({ url: ‘pages/Home’});

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

router.back({ url: ‘pages/Home’, params: { info: ‘你好’ }});

参数调用:

onPageShow() {

​ const params = router.getParams(); // 获取传递过来的参数对象

​ const info = params[‘info’]; // 获取info属性的值

}

4、路由提示框

系统默认询问框

Router模块提供的两个方法:[router.showAlertBeforeBackPage()和[router.back()]来实现这个功能

点击“我的内页”,弹出提示框
在这里插入图片描述
参考代码:

import router from '@ohos.router';
@Entry
@Component
struct RouterTest022 {
  build() {
    Column() {
      Text("我是内页")
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
        .onClick(()=>{
          try {
            router.showAlertBeforeBackPage({
              message: '您确定要返回吗?' // 设置询问框的内容
            });
          } catch (err) {
            console.error(`错误 ${err.code}, message is ${err.message}`);
          }

          // 调用router.back()方法,返回上一个页面
          router.back();
        })
    }

  }
}

router.showAlertBeforeBackPage()方法接收一个对象作为参数,该对象包含以下属性:
**message:**string类型,表示询问框的内容。
如果调用成功,则会在目标界面开启页面返回询问框;如果调用失败,则会抛出异常,并通过err.code和err.message获取错误码和错误信息。
当用户点击“返回”按钮时,会弹出确认对话框,询问用户是否确认返回。选择“取消”将停留在当前页目标页;选择“确认”将触发router.back()方法,并根据参数决定如何执行跳转。

自定义询问框

自定义询问框的方式,可以使用弹窗或者[自定义弹窗]实现,提高应用的用户体验度。

调用弹窗的[promptAction.showDialog()]方法

import promptAction from ‘@ohos.promptAction’
在这里插入图片描述
参考代码:

import router from '@ohos.router';
import promptAction from '@ohos.promptAction'
@Entry
@Component
struct RouterTest022 {
  build() {
    Column() {
      Text("我是内页")
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
        .onClick(()=>{         
          // 弹出自定义的询问框
          promptAction.showDialog({
            message: '您确定要返回吗?',
            buttons: [
              {
                text: '取消吧',
                color: '#00FF00'
              },
              {
                text: '确认吧',
                color: '#FF0000'
              }
            ]
          }).then((result) => {
            if (result.index === 0) {
              console.info('用户点击了“取消”按钮');
            } else if (result.index === 1) {

              console.info('用户点击了“确认”按钮');
              // 调用router.back()方法,返回上一个页面
              router.back();
            }
          }).catch((err) => {
            console.error(`错误: ${err.code}, message is ${err.message}`);
          })
        })
    }

  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB|【免费】高比例可再生能源电力系统的调峰成本量化与分摊模型

目录 主要内容 部分代码 结果一览 下载链接 主要内容 程序复现文献《高比例可再生能源电力系统的调峰成本量化与分摊模型》,从净负荷波动的角度出发,建立了调峰成本的量化与分摊模型,构造了无调峰需求的替代场景,将…

Vulnhub靶机:DC4

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:DC4(10.0.2.57) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/dc-4,313/…

勒索DASH币CrySiS最新变种的同源分析

前言 CrySiS勒索病毒,又称为Dharma勒索病毒,首次出现于2016年,2017年5月此勒索病毒万能密钥被公布之后,导致此勒索病毒曾消失过一段时间,不过随后该勒索病毒就开发了它的最新的一款变种样本,并于2018年开始…

Linux中signal/kill/raise/abort函数(信号函数)

signal函数: 函数作用:注册信号捕捉函数 函数原型: typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 函数参数: signum:信号编号handler:信号处理函数 测试:给没有读…

669. 修剪二叉搜索树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。…

【小记】MacOS Install golang

问题 - command not found: go ➜ brew install golang ➜ go version go version go1.21.7 darwin/arm64写在最后:若本文章对您有帮助,请点个赞啦 ٩(๑•̀ω•́๑)۶

【Linux】基础命令 第二篇

目录 echo 输出重定向:(本质都是写入) 输入重定向cat more 指令 && less指令 head && tail && 管道初步使用 grep:行文本过滤工具(文本按行搜索) date:获取时间 date 命令用于 显示 或 设置系统的…

政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(四){Artist tutorial}·{Python语言}

第一次看到我的演绎文章的小伙伴,如果需要,可以先看一下我这篇文章的前三篇,包括准备环境等等: 政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(一){Pyplot tutorial}https://blog.csdn.…

c++Qt网络操作

1、基础概念 1.1 TCP/UDP TCP 是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、 数据无失序、数据无重复到达的通信) 适用情况: 1.SN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议 2、适合于对传输质量要求较…

【HTML】情人节给npy一颗炫酷的爱心

闲谈 兄弟们,这不情人节快要到了,我该送女朋友什么🎁呢?哦,对了,差点忘了,我好像没有女朋友。不过这不影响我们要过这个节日,我们可以学习技术。举个简单的🌰&#xff1…

寒假作业2024.2.14

1.请编程实现二维数组的杨辉三角 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <unistd.h> int main(int argc, const char *argv[]) {int n;printf("please enter n:");scanf("%d&…

数据库基本操作2

一.DML&#xff08;Data Manipulation Language&#xff09; 用来对数据库中表的数据记录进行更新 关键字&#xff1a;增删改 插入insert 删除delete 更新update 1.数据插入 insert into 表&#xff08;列名1&#xff0c;列名2&#xff0c;列名3……&#xff09;values&a…

【STM32 CubeMX】STM32中断体系结构

文章目录 前言一、中断体系的比喻二、中断的内部结构2.1 EXTI触发方式 2.2 NVIC2.3 cpu与中断2.4 外部中断控制器框图上升沿触发选择寄存器屏蔽/使能寄存器等待处理寄存器 2.5 中断优先级 总结 前言 一、中断体系的比喻 STM32中断体系如下图所示&#xff1a; 一座大型建筑物…

VueCLI核心知识1:ref属性、props配置、mixin混入

1 ref 属性 ref属性类似于js原生获取DOM元素 <template><div><h1 v-text"msg" ref"title"></h1><button click"showDom">点我输出上方的Dom元素</button><School ref"sch"></School>…

AutoGen实战应用(三):多代理协作的数据可视化

之前我完成了关于AutoGen的两篇博客&#xff0c;还没有读过这两篇博客的朋友可以先阅读以下&#xff0c;这样有助于对AutoGen的初步了解&#xff1a; AutoGen实战应用(一)&#xff1a;代码生成、执行和调试_autogen 支持的model-CSDN博客 AutoGen实战应用(二)&#xff1a;多代…

详解结构体内存对齐及结构体如何实现位段~

目录 ​编辑 一&#xff1a;结构体内存对齐 1.1对齐规则 1.2.为什么存在内存对齐 1.3修改默认对齐数 二.结构体实现位段 2.1什么是位段 2.2位段的内存分配 2.3位段的跨平台问题 2.4位段的应用 2.5位段使用的注意事项 三.完结散花 悟已往之不谏&#xff0c;知来者犹可…

2.14作业

1.请编程实现二维数组的杨辉三角。 2.请编程实现二维数组计算每一行的和以及列和。 3.请编程实现二维数组计算第二大值。 4.请使用非函数方法实现系统函数strcat,strcmp,strcpy,strlen. strcat: strcmp: strcpy: strlen:

JVM性能调优 - 服务器性能排查(7)

在排查生产环境的性能问题时,以下是一些常见的步骤和技巧: 监控系统资源:使用系统监控工具(如top、htop、nmon等)来监控服务器的CPU使用率、内存使用率、磁盘IO等系统资源情况。这可以帮助你了解系统的整体负载情况,是否存在资源瓶颈。 分析日志:查看应用程序的日志文件…

操作系统——1.3 操作系统运行环境

1.3 操作系统运行环境 一、概念 操作系统运行机制总览 应用程序与内核程序 特权指令与非特权指令 内核态与用户态 CPU在内核态与用户态的切换 操作系统运行机制的总结 中断和异常总览 中断的作用 中断的类型 内中断的例子 外中断的例子 中断的分类&am…

【51单片机】利用【时间延迟】的原理规避【按键抖动问题】

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 本章是51LCD单片机设计的一个环节&#xff0c;完整可前往相应博客查看完整传送门 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下…