HarmonyOS ArkTS Ability内页面的跳转和数据传递

简介: HarmonyOS ArkTS Ability 的数据传递包括有 Ability 内页面的跳转和数据传递、Ability 间的数据跳转和数据传递。本节主要讲解 Ability 内页面的跳转和数据传递。打开 DevEco Studio,选择一个 Empty Ability 工程模板,创建一个名为 “ArkUIPagesRouter” 的工程为演示示例。

HarmonyOS ArkTS Ability 的数据传递包括有 Ability 内页面的跳转和数据传递、Ability 间的数据跳转和数据传递。本节主要讲解 Ability 内页面的跳转和数据传递。

打开 DevEco Studio,选择一个 Empty Ability 工程模板,创建一个名为 “ArkUIPagesRouter” 的工程为演示示例。

2.4.1 新建 Ability 内页面

初始化工程之后,会生成以下代码。

  • 在 src/main/ets/entryability 目录下,初始会生成一个 Ability 文件 EntryAbility.ts。可以在 EntryAbility.ts 文件中根据业务需要实现 Ability 的生命周期回调内容。
  • 在 src/main/ets/pages 目录下,会生成一个 Index 页面。这也是基于 Ability 实现的应用的入口页面。可以在 Index 页面中根据业务需要实现入口页面的功能。

为了实现页面的跳转和数据传递,需要新建一个页面。在 src/main/ets/pages 目录下,可以通过如下图 2-5 所示右键 “New->Page” 来新建页面。

在原有 Index 页面的基础上,新建一个页面命名为 Second 的页面,如下图 2-6 所示。

Second 页面创建完成之后,会自动做两个动作。

一个动作是在在 src/main/ets/pages 目录下,会创建一个 Second.ets 的文件。文件内容如下:

@Entry
@Component
struct Second {
  @State message: string = 'Hello World'
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

另外一个动作是将 Second 页面信息配置到了 src/main/resources/base/profile/main_pages.json 文件中。main_pages.json 文件内容如下:

{
  "src": [
    "pages/Index",
    "pages/Second"
  ]
}

分别把 Index.ets 和 Second.ets 的 message 变量值改为 “Index 页面” 和 “Second 页面” 以示区别。

2.4.2 页面跳转及传参

页面间的导航可以通过页面路由 router 模块来实现。页面路由模块根据页面 url 找到目标页面,从而实现跳转。通过页面路由模块,可以使用不同的 url 访问不同的页面,包括跳转到 Ability 内的指定页面、用 Ability 内的某个页面替换当前页面、返回上一页面或指定的页面等。通过 params 来传递参数。

在使用页面路由之前,需要先导入 router 模块,如下代码所示。

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

页面跳转的几种方式,根据需要选择一种方式跳转即可。

1. router.push()

通过调用 router.push () 方法,跳转到 Ability 内的指定页面。每调用一次 router.push () 方法,均会新建一个页面。默认情况下,页面栈数量会加 1,页面栈支持的最大页面数量为 32。

当页面栈数量较大或者超过 32 时,可以通过调用 router.clear () 方法清除页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。

用法示例如下:

router.push({
  url: 'pages/Second',
  params: {
    src: 'Index页面传来的数据',
  }
})

2. router.push () 加 mode 参数

router.push () 方法新增 mode 参数,可以将 mode 参数配置为 router.RouterMode.Single 单实例模式和 router.RouterMode.Standard 标准模式。

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

用法示例如下:

router.push({
  url: 'pages/Second',
  params: {
    src: 'Index页面传来的数据',
  }
}, router.RouterMode.Single)

3. router.replace()

通过调用 router.replace () 方法,跳转到 Ability 内的指定页面。即使用新的页面替换当前页面,并销毁被替换的当前页面,页面栈数量不变。

用法示例如下:

router.replace({
  url: 'pages/Second',
  params: {
    src: 'Index页面传来的数据',
  }
})

3. router.replace () 加 mode 参数

router.replace () 方法新增了 mode 参数,可以将 mode 参数配置为 router.RouterMode.Single 单实例模式和 router.RouterMode.Standard 标准模式。

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

用法示例如下:

router.replace({
  url: 'pages/Second',
  params: {
    src: 'Index页面传来的数据',
  }
}, router.RouterMode.Single)

最后,在 Index.ets 文件中添加按钮以触发跳转。Index.ets 代码如下:

// 导入router模块
import router from '@ohos.router';
@Entry
@Component
struct Index {
  @State message: string = 'Index页面'
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        // 添加按钮,触发跳转
        Button('跳转')
          .fontSize(40)
          .onClick(() => {
            router.push({
              url: 'pages/Second',
              params: {
                src: 'Index页面传来的数据',
              }
            });
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

2.4.3 参数接收

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

import router from '@ohos.router';
@Entry
@Component
struct Second {
  @State src: string = router.getParams()?.['src'];
  // 页面刷新展示
  ...
}

可以调用 router.back () 方法返回到上一个页面。

最终,完整 Second.ets 的代码如下:

// 导入router模块
import router from '@ohos.router';
@Entry
@Component
struct Second {
  @State message: string = 'Second页面'
  @State src: string = router.getParams()?.['src'];
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        // 显示传参的内容
        Text(this.src)
          .fontSize(30)
        // 添加按钮,触发返回
        Button('返回')
          .fontSize(40)
          .onClick(() => {
            router.back();
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

2.4.4 运行

运行项目后,初始化界面如图 2-7 所示。

在 Index 页面中,点击 “跳转” 后,即可从 Index 页面跳转到 Second 页面,并在 Second 页面中接收参数和进行页面刷新展示,界面效果如图 2-8 所示。

当在 Second 页面点击 “返回” 后,则会回到如图 2-7 所示 Index 页面。

以上就是完整的页面跳转及传参、接收参数的过程。

618 购书大优惠

一分耕耘一分收获,学好 HarmonyOS 应用开发,挑战高薪!

趁着 618 活动季节,多给自己充充电。少玩手机,多学习才是王道!目前当当、京东,开启平台惊现购书 5 折优惠促销活动,可谓是非常实惠!

当然,也有童鞋不喜欢文字,就喜欢看视频,那么也有视频网课,比如,这门幕课网的 “鸿蒙系统实战短视频 App 从 0 到 1 掌握 HarmonyOS” 就非常的牛 B ,可以教你从 0 开始开发一个类似于抖音的短视频 App。共计 39 个小时的时长,内容也是非常全面!

参考引用

  • 鸿蒙 HarmonyOS 手机应用开发实战 [M]. 北京:清华大学出版社,2022.
  • 鸿蒙 HarmonyOS 应用开发从入门到精通 [M]. 北京:北京大学出版社,2022.
  • 跟老卫学 HarmonyOS 开发 [EB/OL].<https: github.com waylau harmonyos-tutorial>,2020-12-13/2022-12-29
  • HarmonyOS 题库 [EB/OL].<https: github.com waylau harmonyos-exam>,2022-11-04/2022-12-29
目录
相关文章
|
5天前
|
JavaScript 开发者 索引
鸿蒙应用开发从入门到实战(九):ArkTS渲染控制
ArkTS拓展了TypeScript,可以结合ArkUI进行渲染控制,是的界面设计具有可编程性。本文简要描述鸿蒙应用开发中的条件渲染和循环渲染。
|
6天前
|
JavaScript
鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法
ArkUI除系统预置的组件外,还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。
|
7天前
|
API
鸿蒙应用开发从入门到实战(七):ArkTS组件声明语法
《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容、欢迎关注!​本文从界面制作从组件声明开始,通过一个相对简单的案例来系统的学习 ArkTS 声明组件的语法。
|
7天前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
69 0
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
7天前
|
JavaScript 前端开发 开发者
鸿蒙应用开发从入门到实战(六):ArkTS声明式UI和组件化
鸿蒙开发语言ArkTS在继承了Typescrip语法的基础上,主要扩展了声明式UI开发相关的能力。
|
7天前
|
开发框架 JavaScript 数据库
鸿蒙应用开发从入门到实战(四):ArkTS 语言概述
ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。
|
1月前
|
移动开发 网络协议 小程序
鸿蒙NEXT即时通讯/IM系统RinbowTalk v2.4版发布,基于MobileIMSDK框架、ArkTS编写
RainbowTalk是一套基于开源即时通讯讯IM框架 MobileIMSDK 的产品级鸿蒙NEXT端IM系统。纯ArkTS编写、全新开发,没有套壳、也没走捷径,每一行代码都够“纯血”。与姊妹产品RainbowChat和RainbowChat-Web 技术同源,历经考验。
75 1
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
2月前
|
安全 JavaScript API
鸿蒙开发核心要素
鸿蒙开发核心要素
|
3月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
130 0