页面跳转和两个页面之间的数据传递-鸿蒙ArkTS

news2024/12/24 9:43:58

页面跳转和两个页面之间的数据传递-ArkTS

  • 页面跳转和两个页面之间的数据传递-ArkTS
    • 关于router的使用
    • **跳转页面的实现方式。**
    • 页面接受跳转传递的参数
    • 页面返回及携带参数
    • 效果
    • 代码
      • Index页面
      • Second页面
    • 参考资料

页面跳转和两个页面之间的数据传递-ArkTS

本篇文章主要是对两个页面之间数据传递进行实现。

在这里插入图片描述

在这里插入图片描述

关于router的使用

页面跳转和参数接受是通过导入 router 模块实现。

import router from '@ohos.router';
  • router.pushUrl() 跳转到指定页面。
  • **router.replaceUrl() **替换当前页面并销毁。
  • **router.back() ** 返回上一个页面。
  • router.getParams() 获取上一个页面跳转过来携带的参数。
  • router.clear() 清空当前页面栈中所有历史页面,只会保留当前页面作为栈顶页面。
  • router.getLength() 获取当前页面栈中的页面数量。
  • router.getState() 获取当前页面的状态信息。
  • router.showAlertBeforeBackPage() 开启页面返回询问对话框。
  • router.hideAlertBeforeBackPage() 禁用页面返回询问对话框。

跳转页面的实现方式。

API9及以上,router.pushUrl()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard多实例模式。

router.pushUrl()方法内的基本参数

router.pushUrl({
	// 跳转页面路径
	url: '页面',
	// 跳转携带的参数
	params: {
		变量名:值
	}
}, 当前模式)

方式一

在多实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈的元素数量不变;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量会加1。

// params对象内的变量是可以自定义参数名的,任意名称都可以只要在接受的时候通过传递时过来的变量名称就可以的。
router.pushUrl({
 url: 'pages/Second',
 params: {
	name: 'Index页面传递'
 }
}, router.RouterMode.Single)

方式二

在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,替换当前页面,并销毁被替换的当前页面,移动后的页面为新建页,页面栈的元素数量会减1;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量不变。

// params对象内的变量是可以自定义参数名的,任意名称都可以只要在接受的时候通过传递时过来的变量名称就可以的。
router.pushUrl({
 url: 'pages/Second',
 params: {
	name: 'Index页面传递'
 }
}, router.RouterMode.Standard)

页面接受跳转传递的参数

通过 router.getParams() 方法获取页面传递过来的自定义参数。

import router from '@ohos.router'
@Entry
@Component
struct Second {
    // 用于接受由页面跳转传递的参数名称
  @State str: string = router.getParams()?.['name']
	// 页面刷新展示
    ....
  
}

页面返回及携带参数

返回上一个页面

router.back();

返回指定页面

router.back({url: 'pages/Index'});

返回并携带参数

// 需要在 router.back() 方法内类似 router.pushUrl() 的用法
router.back({
 url: 'pages/Index',
 params: {
 	src: 'Second传回来的数据'
 }
})

接收返回的参数

import router from '@ohos.router'
@Entry
@Component
struct Index {
	//定义一个变量来接收返回的参数
  @State src: string = ''

    // 这是一个生命周期,当页面每次显示的时候都会调用
  onPageShow(){
      // 通过拿到 router 中名称为 src 的值
    this.src = router.getParams()?.['src']
  }

  build() {
    Row() {
      Column() {
          // 将返回接收到的值显示
        Text(this.src)
        Button('Next')
          .width("90%")
          .onClick(() => {
            router.pushUrl({
              url: 'pages/Second',
              params: {
                name: 'Index页面传递'
              }
            }, router.RouterMode.Single)
          })
      }
      .width('100%')
    }
    .height('100%').backgroundColor('#efefef')
  }
}

效果

在这里插入图片描述

在这里插入图片描述

代码

Index页面

import router from '@ohos.router'
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  @State src: string = ''

  onPageShow(){
    this.src = router.getParams()?.['src']
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Text(this.src)
        Button('Next')
          .width("90%")
          .onClick(() => {
            router.pushUrl({
              url: 'pages/Second',
              params: {
                name: 'Index页面传递'
              }
            }, router.RouterMode.Single)
          })
      }
      .width('100%')
    }
    .height('100%').backgroundColor('#efefef')
  }
}

Second页面

import router from '@ohos.router'
@Entry
@Component
struct Second {
  @State message: string = 'Hello World'
  @State str: string = router.getParams()?.['name']

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Text(this.str)
        Button('back')
          .onClick(() => {
            router.back({
              url: 'pages/Index',
              params: {
                src: 'Second传回来的数据'
              }
            })
          })
          .width("90%")
      }
      .width('100%')
    }
    .height('100%').backgroundColor('#efefef')
  }
}

参考资料

官网文档

官网视频对应文档

router参考文档

官网视频

官网对应视频

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

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

相关文章

怎么把CAD转成JPG图片?一个方法教你如何转换

CAD是计算机辅助设计的缩写,通常指的是AutoCAD软件所生成的DWG文件格式。DWG是一种二进制文件格式,用于保存2D和3D设计数据和元数据,支持多种操作系统和程序使用。该格式通常用于工程、建筑、制造和其他领域的设计和绘图。 CAD文件转换成JPG图…

企业安全架构体系的现状和解决方案

一、企业安全现状 从2016年底开始随着网络安全事件的爆发和国家层面对网络安全的重视程度,让网络安全已经上升到国家战略层面,同时网络空间已经成为领土、领海、领空和太空之外的第五空间, 是国家主权建设的新疆域。 随着中国对外开放的进一…

echarts tooltip提示框加单位

效果: 1.比较简单的方法 series: [{name: "重大风险",type: "bar",data: data2,color: ExtremeRiskColor,tooltip: {valueFormatter: function (value) {return value 个;}},},{name: "较大风险",type: "bar",data: dat…

GPT垂直领域相关模型 现有的开源领域大模型

对于ToC端来说,广大群众的口味已经被ChatGPT给养叼了,市场基本上被ChatGPT吃的干干净净。虽然国内大厂在紧追不舍,但目前绝大多数都还在实行内测机制,大概率是不会广泛开放的(毕竟,各大厂还是主盯ToB、ToG市…

实例038 设置窗体在屏幕中的位置

实例说明 在窗体中可以设置窗体居中显示,本例通过设置窗体的Left属性和Top属性可以准确设置窗体的位置。运行本例,效果如图1.38所示。 技术要点 设置窗体在屏幕中的位置,可以通过设置窗体的属性来实现。窗体的Left属性表示窗体距屏幕左侧的…

问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题

问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题 场景复现 1 new String() 2 快捷方式生成变量 final修饰的 final String s new String();步骤一:确保settings配置信息 settings-----》Editor------》Code Style--------》java下的这两个选项不…

通过TightVNC远程访问MacOS

目录 一、下载 TightVNC 下载链接:https://www.tightvnc.com/ 下载后按步骤进行安装,安装完成后安装目录如下: 运行 tvnviewer.exe,输入远程 IP,点击【connect】: 输入密码,点击【OK】后即可远…

Android布局【TableLayout】

文章目录 说明常见属性子控件设置属性 项目结构主要代码 说明 TableLayout也称为表格布局 常见属性 android:collapseColumns:设置需要被隐藏的列的序列号,从0开始android:stretchColumns:设置允许被拉伸的列的列序号,从0开始&…

数据结构算法--2 冒泡排序,选择排序,插入排序

基础排序算法 冒泡排序 思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。 这时冒泡排序第一…

vulnhub靶场之ADROIT: 1.0.1

准备: 攻击机:虚拟机kali、本机win10。 靶机:Adroit: 1.0.1,下载地址:https://download.vulnhub.com/adroit/Adroit-v1.0.1.ova,下载后直接vbox打开即可。 知识点:shell反弹(jar&…

接口自动化必备技能——jmeter提取token方式以及设置成全局变量(跨线程组传token值)方式

前言 今天Darren洋教大家如何使用jmeter中的插件来进行token值的提取与调用,今天Darren洋介绍两种jmeter提取token值的方式,一种是在当前线程组中直接提取token值,一种是跨线程组的方式进行token值的提取并调用给不同线程组里的HTTP接口使用。…

LeetCode算法递归类—平衡二叉树

目录 110. 平衡二叉树 题解: 运行结果: 优化版1: 运行结果: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度…

基于Bsdiff差分算法的汽车OTA升级技术研究(学习)

摘要 针对汽车OTA整包升级时,用户下载时间长,升级时间长,设备服务器端压力大等问题,本文提出了一种基于Bsdiff差分算法的汽车OTA升级技术。该算法能够对比新旧版本的差异,进行差分文件下载,减少软件包的下…

bat批处理启动jar包

echo off title “gwjy_sc(86)” java -jar -Xms512m -Xmx1024m -XX:MaxNewSize512m -XX:MaxPermSize512m gwjy_sc.jar --spring.config.localapplication.yml exit

Spring Bean的作用域和生命周期

文章目录 1. Bean的作用域2. Spring的生命周期3. Bean的生命周期4. 相关注解总结 1. Bean的作用域 Bean 的作用域指的是 Bean 在 Spring 容器中的行为(Bean 实例创建及生命周期),它的行为是由 Spring 来管理的,可以根据具体情况选…

urllib爬虫模块

urllib爬取数据 import urllib.request as request# 定义url url "https://www.baidu.com" #模拟浏览器发起请求获取响应对象 response request.urlopen(url)""" read方法返回的是字节形式的二进制数据 二进制--》字符串 解码 decode( 编码的格式…

基于粒子群改进深度信念网络的回归分析,基于PSO-DBN的回归分析

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) 粒子群算法的原理 DBN的粒子群改进深度信念网络的回归分析 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算…

猿辅导《暑假一本通》:28天科学规划,帮助孩子保持学习状态

一直以来,有效利用寒、暑假期查漏补缺、解决偏科问题、初步养成好的自主学习习惯等是很多家长对学生的期望。但当前市面上教辅品类繁多,内容质量却参差不齐。据北京开卷统计数据显示,2022年前三季度零售市场上的教辅图书超过8000种&#xff0…

[NDK]从Opengles到Vulkan-基础篇(9)-视口相关

关于绘制调用的流程 我们可以看到整个流程步骤 1 光栅化2 裁剪测试3 多重采样4 深度测试5 模板测试6 混合7 抖动8 输出帧数据 这一节会涉及到裁剪测试 ##关于视口 我们需要先了解以下四个概念 1.屏幕:即计算机的整个屏幕大小。 2.窗口:即屏幕中的某一个窗口,可放大缩小和移…

通讯商二要素Api接口验证真伪

随着互联网的普及和各种社交平台、电商平台、金融平台的发展,许多业务都需要用户进行实名认证,这也就涉及到了手机号码和姓名的验证问题。为了解决这个问题,现在有很多运营商提供的二要素API接口能够进行手机号码和姓名的验证,本文…