HarmonyOS 鸿蒙Next 使用路由实现不同页面的跳转和数据传递

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用路由实现不同页面的跳转和数据传递 页面路由

页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。下面我们从页面跳转、页面返回和页面返回前增加一个询问框几个方面介绍Router模块提供的功能。

1.1页面跳转

页面跳转是开发过程中的一个重要组成部分。在使用应用程序时,通常需要在不同的页面之间跳转,有时还需要将数据从一个页面传递到另一个页面。

Router模块提供了两种跳转模式,分别是router.pushUrl()和router.replaceUrl()。这两种模式决定了目标页是否会替换当前页。

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

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

按照如下步骤实现页面跳转:

1)新建2个页面 etc/pages/routertest/RouterPage1.ets

@Entry
@Component
struct RouterPage1 {

  build() {
    Column(){
      Text("页面1").fontSize(50)
    }.width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)

  }
}

etc/pages/routertest/RouterPage2.ets

@Entry
@Component
struct RouterPage2 {
  build() {
    Column(){
      Text("页面2").fontSize(50)
    }.width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

2)页面跳转实现(对以上两个页面分别增加Button,通过router实现页面跳转)

  • RouterPage1.ets:
import router from '@ohos.router'
@Entry
@Component
struct RouterPage1 {

  build() {
    Column(){
      Text("页面1").fontSize(50)
      Button("跳转到页面2")
        .onClick(()=>{
          router.replaceUrl({
            url:'pages/routertest/RouterPage2'
          })
        })
    }.width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}
  • RouterPage2.ets:
import router from '@ohos.router'
@Entry
@Component
struct RouterPage2 {
  build() {
    Column(){
      Text("页面2").fontSize(50)
      Button("返回到页面1")
        .onClick(()=>{
          router.pushUrl({
            url:"pages/routertest/RouterPage1"
          })
        })
    }.width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

1.2 参数传递

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

router.pushUrl({
   url: 'pages/Detail', // 目标url
   params: {
     id:10,
     info:{name:'zs',age:18}
} 
}

在目标页中,可以通过调用Router模块的getParams()方法来获取传递过来的参数。例如:

const params = router.getParams(); // 获取传递过来的参数对象
const id = params['id']; // 获取id属性的值
const age = params['info'].age; // 获取age属性的值

如下案例中,RouterPage1页面跳转到RouterPage2页面传递一个简单参数和一个对象参数。

1)RouterPage1.ets页面:

import router from '@ohos.router'
@Entry
@Component
struct RouterPage1 {

  build() {
    Column(){
      Text("页面1").fontSize(50)
      Button("跳转到页面2")
        .onClick(()=>{
          router.pushUrl({
            url:"pages/routertest/RouterPage2",
            params:{
              //值
              value:'hello router',

              //对象
              person:{
                name:'zs',
                age:18
              }
            }
          })
        })
    }.width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

2)RouterPage2.ets页面:

import router from '@ohos.router'
import { Person } from '../managestate/LocalStorageTest2'
@Entry
@Component
struct RouterPage2 {
  @State
  value:string = router.getParams()['value']

  @State
  person:Person = router.getParams()['person']

  build() {
    Column(){
      Text("页面2").fontSize(50)
      Text(`value:${this.value}`).fontSize(30)
      Text(`person:${this.person.name}-${this.person.age}`).fontSize(30)
      Button("返回到页面1")
        .onClick(()=>{
          router.back()
        })
    }.width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

更多关于HarmonyOS 鸿蒙Next 使用路由实现不同页面的跳转和数据传递的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS(鸿蒙Next)中,使用路由实现不同页面的跳转和数据传递主要通过Router模块来完成。Router模块提供了页面跳转、参数传递、返回结果等功能。

  1. 页面跳转:使用Router.push方法可以实现页面跳转。例如:

    import router from '[@ohos](/user/ohos).router';
    router.push({
        url: 'pages/PageB',
        params: { key: 'value' }
    });

    这里url指定目标页面的路径,params用于传递数据。

  2. 数据传递:在目标页面中,可以通过router.getParams方法获取传递过来的数据。例如:

    import router from '[@ohos](/user/ohos).router';
    let params = router.getParams();
    console.log(params.key); // 输出 'value'
  3. 返回结果:使用router.back方法可以返回到上一个页面,并可以携带返回结果。例如:

    import router from '[@ohos](/user/ohos).router';
    router.back({
        result: { resultKey: 'resultValue' }
    });

    在源页面中,可以通过router.getResult方法获取返回结果。例如:

    import router from '[@ohos](/user/ohos).router';
    let result = router.getResult();
    console.log(result.resultKey); // 输出 'resultValue'
  4. 页面栈管理Router模块还提供了页面栈管理功能,如router.replace用于替换当前页面,router.clear用于清空页面栈等。

通过这些方法,可以在HarmonyOS中实现页面之间的跳转和数据传递。

更多关于HarmonyOS 鸿蒙Next 使用路由实现不同页面的跳转和数据传递的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用路由实现页面跳转和数据传递可以通过Router模块完成。首先,在config.json中配置页面路由信息。然后,使用Router.push方法进行页面跳转,并通过params参数传递数据。例如:

import router from '@ohos.router';

// 跳转到目标页面并传递数据
router.push({
  url: 'pages/TargetPage',
  params: { key: 'value' }
});

在目标页面中,通过router.getParams获取传递的数据:

import router from '@ohos.router';

let params = router.getParams();
console.log(params.key); // 输出: value

这种方式简单高效,适用于大多数页面跳转和数据传递场景。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!