@ohos.router (页面路由)实现页面间跳转与数据传递

news2024/11/15 5:31:45

一、描述

        本模块提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、用应用内的某个页面替换当前页面、返回上一页面或指定的页面等。

二、导入模块

import router from '@ohos.router'

三、router.pushUrl

1、描述

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

        router.pushUrl这种方式的回调方式有两种,一种是Promise,另一种的callback。我们接下来已Promise回调方式为列。

2、接口

Promise方式:router.pushUrl(options: RouterOptions):Promise<void>

Callback方式:router.pushUrl(options: RouterOptions, callback: AsyncCallback<void> ):void

Promise方式:router.pushUrl(options: RouterOptions, mode: RouterMode):Promise<void>

Callback方式:router.pushUrl(options: RouterOptions, , mode: RouterMode , callback:AsyncCallback<void> ):void

3、参数

参数名类型说明
optionsRouterOptions跳转页面描述信息。
modeRouterMode跳转页面使用的模式。
callbackAsyncCallback<void>异常相应回调。

        RouterOptions类说明:

名称类型必填说明
urlstring

表示目标页面的Url,可以使用一下两种格式:

--页面绝对路径,由配置文件中pages列表提供,例如:“pages/index/index”等。

--特殊值,如果url的值是“/”,则跳转到首页。

paramsobject表示路由调转时要同时传递到目标页面的数据,切换到其它页面时,当前接收的数据无效。跳转到目标页面后使用router.getParams()获取传递的参数,并且是自行构建object类型对象进行传递的。

        RouterMode枚举类说明:

名称说明
Standard

多实例模式,也是默认情况下的跳转模式。目标页面会被添加到页面栈顶,无论栈中是否存在相同的url的页面。

说明:

不使用路由跳转模式时,则按照默认的多实例模式进行跳转。

Single单实例模式。如果目标页面的url已经存在于页面栈中,则该url页面移动到栈顶。如果目标页面的url不存在于页面栈中,则按照默认的多实例默认进行跳转。

4、示例

示例1-Promise(一个参数):

// 导入模块
import router from '@ohos.router';

@Entry
@Component
struct RouterPage {
  @State message: string = 'router.pushUrl-跳转到应用内的指定页面'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .width("96%")

        // router.pushUrl的回调方式有两种,一种的Promise、一种的callback
        Button("router.pushUrl").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {
          router.pushUrl({
            url: "pages/api/PushUrlSecondPage",
            params: {
              msg: "message RouterPage",
              coreEntity: {
                coreArray: [80, 36, 88]
              }
            }
          }).then(() => {
            console.info("router.pushUrl Promise success")
          })
            .catch((err) => {
              console.error(`router.pushUrl Promise failed, code is ${err.code}, message is ${err.message}`);
            })
        })

      }
      .width('100%')
      .height("100%")
    }
    .height('100%')
  }
}

示例1-callback(两个参数)

......
Button("router.pushUrl-callback").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {
          router.pushUrl({
            url: "pages/api/PushUrlSecondPage",
            params: {
              msg: "message RouterPage",
              coreEntity: {
                coreArray: [80, 36, 88]
              }
            }
          }, (error) => {
            if (error) {
              console.error(`router.pushUrl callback failed, code is ${error.code}, message is ${error.message}`);
            }
          });
        });
......

示例3-Promise(两个参数,增加跳转模式):

Button("router.pushUrl-RouterMode").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {
          router.pushUrl({
            url: "pages/api/PushUrlSecondPage",
            params: {
              msg: "message RouterPage",
              coreEntity: {
                coreArray: [80, 36, 88]
              }
            }
          }, router.RouterMode.Single)
        })

打印结果:

四、router.replaceUrl

1、描述

        用应用内的某个页面替换当前页面,并销毁被替换的页面。(其实就是跳转时关闭当前页并打开新的页面,当再点击返回按钮时就会回到上上个页面了)

        outer.replaceUrl这种方式的回调方式有两种,一种是Promise,另一种的callback。我们接下来已Promise回调方式为列。

2、接口

Promise方式:router.replaceUrl(options: RouterOptions):Promise<void>

Callback方式:router.replaceUrl(options: RouterOptions, callback: AsyncCallback<void> ):void

Promise方式:router.replaceUrl(options: RouterOptions, mode: RouterMode):Promise<void>

Callback方式:router.replaceUrl(options: RouterOptions, , mode: RouterMode , callback:AsyncCallback<void> ):void

3、参数

参数RouterOptions、RouterMode参数内容同上。

4、示例


        // 一个参数,只有替换页面描述信息
        Button("router.replaceUrl").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {
          router.replaceUrl({
            url: "pages/api/router/PushUrlSecondPage",
            params: {
              msg: "message RouterPage",
              coreEntity: {
                coreArray: [80, 36, 88]
              }
            }
          })
            .then(() => {
              console.info("router.replaceUrl Promise success")
            })
            .catch((err) => {
              console.error(`router.replaceUrl Promise failed, code is ${err.code}, message is ${err.message}`);
            })

        })

        // 两个参数,增加跳转模式
        Button("router.replaceUrl-RouterMode").width("96%").fontSize(22).margin({ top: 12 }).onClick(() => {
          router.replaceUrl({
            url: "pages/api/router/PushUrlSecondPage",
            params: {
              msg: "message RouterPage",
              coreEntity: {
                coreArray: [80, 36, 88]
              }
            }
          }, router.RouterMode.Standard)
        })

五、router.back

1、描述

        返回上一页面或指定的页面。

2、接口

router.back(options?: RouterOptions): void

3、参数

参数RouterOptions、RouterMode参数内容同上。

4、示例


        // 返回上一个页面
        Button("router.back").margin({ top: 12 }).width("96%").onClick(() => {
          router.back()
        })

        // 跳转指定页面
        Button("router.back-url").margin({ top: 12 }).width("96%").onClick(() => {
          router.back({
            url: "pages/api/BaseApiPage"
          })
        })

说明:返回页面描述信息,其中参数url指路由跳转时会返回到指定url的界面,如果页面栈上没有url页面,则不响应该情况。如果url未设置,则返回上一页,页面不会重新构建,页面栈里面的page不会回收,出栈后会被回收。

六、其它路由接口

1、router.clear

clear(): void

清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。

示例:

router.clear();    

2、router.getLength

getLength(): string

获取当前在页面栈内的页面数量。

返回值 - string - 页面数量,页面栈支持最大数量是32.

示例:

let size = router.getLength();        
console.log('pages stack size = ' + size);    

上述两个接口总体代码:


        // 获取当前在页面栈内的页面数量。
        Button("router.getLength").margin({ top: 12 }).fontSize(22).width("96%").onClick(() => {
          let size = router.getLength();
          console.log('zhangRouter router.getLength result size = ' + size);
        })

        //清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。
        Button("router.clear").margin({ top: 12 }).fontSize(22).width("96%").onClick(() => {
          router.clear();
          console.log('zhangRouter onClick router.clear()');
        })

打印结果:

3、router.getState

getState(): RouterState

获取当前页面的状态信息。

返回值RouterState说明:

名称类型必填说明
indexnumber表示当前页面在页面栈中的索引。从栈底到栈顶,index从1开始递增。
namestring表示当前页面的名称,即对应文件名。
pathstring表示当前页面的路径。

示例:


        // 获取当前页面的状态信息
        Button("router.getState").margin({ top: 12 }).fontSize(22).width("96%").onClick(() => {
          let rState = router.getState();
          console.log('zhangState current index = ' + rState.index);
          console.log('zhangState current name = ' + rState.name);
          console.log('zhangState current path = ' + rState.path);
        })

打印结果:

路径:

4、router.showAlertBeforeBackPage

showAlertBeforeBackPage(options: EnableAlertOptions): void

开启页面返回询问对话框。

参数:

参数名称类型必填说明
optionsEnableAlertOptions文本弹窗信息描述。

EnableAlertOptions说明:

名称类型必填说明
messagestring询问对话框内容。

示例:

  // 开启页面返回询问对话框
        Button("router.showAlertBeforeBackPage").margin({ top: 12 }).fontSize(22).width("96%").onClick(() => {
          router.showAlertBeforeBackPage({
            message: "Message Info"
          })
        })

说明:在该页面调用showAlertBeforeBackPage接口之后,在该页面返回时弹出一个提示框,提示框提示内容是“message”对应内容,并且还有两个按钮,一个“取消”,一个“确定”,点击取消还停留在该页面,点击确定,返回到上一页。(注意:这个功能点击后只有效一次

5、router.hideAlertBeforeBackPage

hideAlertBeforeBackPage(): void

禁用页面返回询问对话框。

示例:

router.hideAlertBeforeBackPage();    

6、router.getParams

getParams(): Object

获取发起跳转的页面往当前页传入的参数。

返回值说明:

类型

说明

object

发起跳转的页面往当前页传入的参数。

示例:

第一个页面传数据:

 router.pushUrl({
            url: "pages/api/router/PushUrlSecondPage",
            params: {
              msg: "message RouterPage",
              coreEntity: {
                coreArray: [80, 36, 88]
              }
            }

第二个页面接受数据:

@State paramsMsg: string = router.getParams()["msg"];
@State coreEntity: object = router.getParams()["coreEntity"];
......
 Text(this.paramsMsg)
          .fontSize(20)
          .width("96%")
          .margin({ top: 12 })

Text("传递的coreArray第一条数据:" + this.coreEntity["coreArray"][0])
          .fontSize(20)
          .width("96%")
          .margin({ top: 12 })

        至此,关于Router页面路由相关接口就全部讲解完了,如果有写错的地方或者有需要交流的地方,大家可以留言。

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

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

相关文章

OpenAI GPT商店面临质量与合规问题;黄仁勋预测:十年内AI将实时生成游戏画面

&#x1f989; AI新闻 &#x1f680; OpenAI GPT商店面临质量与合规问题 摘要&#xff1a;OpenAI旗下的GPT商店因存在大量涉嫌侵权内容、助长学术不诚实行为及违规内容等问题而引起关注。其中包括未经授权使用迪士尼、漫威角色生成内容的GPT模型&#xff0c;以及声称能绕过剽…

Wireshark TS | DNS 案例分析之外的思考

前言 承接之前一篇《Packet Challenge 之 DNS 案例分析》&#xff0c;在数据包跟踪文件 dnsing.pcapng 中&#xff0c;关于第 4 题&#xff08;What is the largest DNS response time seen in this trace file? &#xff09;的分析过程中曾经碰到一个小问题&#xff0c;主要…

vue-quill-editor和vue-ueditor-wrap富文本编辑器应用

目录 一、vue-quill-editor 1.1、界面展示 1.2、代码介绍 1.2.1、安装 1.2.2、配置 1.2.3、代码应用 1.2.4、提取内容 二、vue-ueditor-wrap 2.1、界面展示 2.2、代码介绍 2.2.1、安装 2.2.2、配置 2.2.3、代码应用 一、vue-quill-editor 1.1、界面展示 文本输出…

极简自建web视频会议,私有云,rtmp/rtsp/webrtc一键参会直播会议互动方案

随着视频互动深入工作日常&#xff0c;很多客户需要自建一个会议&#xff0c;监控的交互平台&#xff0c;目前外面不管是开源还是非开源的平台&#xff0c;都是极为复杂&#xff0c;一般linux安装库关联部署复杂&#xff0c;非技术人员根本没办法使用&#xff0c;不方便集成部署…

C#基于SMTP的邮件发送

准备工作 注册邮箱 首先我们需要注册一个作为发送邮件的邮箱&#xff0c;这一步可以直接进入网易邮箱官网进行注册&#xff0c; 注册地址&#xff1a;https://mail.163.com/ 这里我们可以选择【快速注册】和【普通注册】&#xff0c;如图1-1所示&#xff0c;这里我选择的普…

vue3初步学习

vue3初步学习 vue模版 练习代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>实验4</ti…

BAAI 北京智源研究院

文章目录 关于 BAAI产品悟道大模型FlagOpen 大模型技术天演 生物智能九鼎 智算平台 关于 BAAI BAAI : Beijing Academy of Artificial Intelligence 北京智源研究院 官网&#xff1a;https://www.baai.ac.cnhf : https://huggingface.co/BAAI百度百科 https://baike.baidu.co…

翻看去年录的幼儿园选择的视频,我被打脸了,真疼

去年 7 月份发了一个幼儿园选择的视频&#xff0c;如今回头看&#xff0c;我被打脸了&#xff0c;真疼呀 去年的选择 省流版&#xff1a;当时我列了三种选择&#xff1a; 普惠公立幼儿园普惠私立或民办有政府补贴的幼儿园私立幼儿园 以下讨论是基于我个人情况&#xff0c;在北京…

使用POI以OLE对象的形式向excel中插入附件(pdf为例)

前言&#xff1a; 最近在使用easyExcel操作excel文件时&#xff0c;一直想找到一个方法可以往excel中填充附件&#xff0c;但是目前只发现POI可以插入附件&#xff0c;于是将方法记录如下&#xff1a; 实现&#xff1a; 这个方法主要是使用 Apache POI 的 HSSFWorkbook 类来…

算法公式汇总

文章目录 三角函数定义式诱导公式平方关系两角和与差的三角函数积化和差公式和差化积公式倍角公式半角公式万能公式其他公式反三角函数恒等式 三角函数定义式 三角函数 定义式 余切&#xff1a; c o t A 1 t a n A \text { 余切&#xff1a;} \ cotA \frac{1}{tanA} 余切&a…

javaWeb项目-高校社团活动管理平台功能介绍

开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 大学生社团活动平台&#xff1b;Ja…

第十一届蓝桥杯大赛第二场省赛试题 CC++ 研究生组-子串分值和

solution1&#xff08;通过40%&#xff09; 依次求子串并统计出现过的字母个数 #include<iostream> #include<string> #include<set> using namespace std; int main(){string s, subs;cin >> s;int len s.size(), ans 0;for(int j 1; j < len…

AI开源概览及工具使用

一、前言 随着ChatGPT热度的攀升&#xff0c;越来越多的公司也相继推出了自己的AI大模型&#xff0c;如文心一言、通义千问等。各大应用也开始内置AI玩法&#xff0c;如抖音的AI特效&#xff1b; 关联资源&#xff1a;代码 GitHub、相关论文、项目Demo、产品文档、Grok Ai、gr…

国内git最新版本下载链接2.44

git官网地址:Git - Downloading Package (git-scm.com) 蓝奏云: ​​​​​​gGit-2.44.0-64-bit.exe - 蓝奏云 git仓库地址:git/git: Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via …

机器学习:智能时代的核心引擎

目录 一、什么是机器学习 二、监督学习 三、无监督学习 四、半监督学习 五、强化学习 一、什么是机器学习 机器学习是人工智能的一个分支&#xff0c;它主要基于计算机科学&#xff0c;旨在使计算机系统能够自动地从经验和数据中进行学习并改进&#xff0c;而无需进行明确…

LeetCode刷题【树状数组、并查集、二叉树】

目录 树状数组307. 区域和检索 - 数组可修改406. 根据身高重建队列673. 最长递增子序列的个数1409. 查询带键的排列 并查集128. 最长连续序列130. 被围绕的区域 二叉树94. 二叉树的中序遍历104. 二叉树的最大深度101. 对称二叉树543. 二叉树的直径108. 将有序数组转换为二叉搜索…

JavaSE:类与对象

目录 一、前言 二、类与对象的介绍 1.类的定义格式 三、类的实例化 1.类的实例化介绍 2.成员初始化 3.类中方法的实现 四、封装 1.private实现封装 2.getter和setter方法 五、构造方法的使用 1.构造方法的介绍 2.构造方法的特性 六、this引用 1.this的介绍 2.th…

基于SpringBoot+MyBatis框架的智慧生活商城系统的设计与实现(源码+LW+部署+讲解)

目录 前言 需求分析 可行性分析 技术实现 后端框架&#xff1a;Spring Boot 持久层框架&#xff1a;MyBatis 前端框架&#xff1a;Vue.js 数据库&#xff1a;MySQL 功能介绍 前台功能拓展 商品详情单管理 个人中心 秒杀活动 推荐系统 评论与评分系统 后台功能拓…

【源码】I.MX6ULL移植OpenCV

编译完成的源码&#xff1a; git clone https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.下载源码放在自己的opecv源码目录下 2.QTOpenCV工程代码放置的位置 3.更改.pro工程文件的opencv地址 4.使用命令行编译 前提是自己环境中已经配置好arm-qt的交叉编译…

【Langchain-Chatchat】部署ChatGLM3-6B-32K教程

介绍 Langchain-Chatchat这个框架可以帮助我们更容易的部署大语言模型&#xff0c;之前也写过ChatGLM传统的部署教程&#xff0c;有兴趣的可以参考 【ChatGLM3】第三代大语言模型多GPU部署指南【ChatGLM2-6B】从0到1部署GPU版本 借助Langchain-Chatchat框架&#xff0c;可以…