鸿蒙开发 - 页面路由(页面跳转、返回)

Harmony OS NEXT版本(接口及解决方案兼容API12版本或以上版本)

这篇文章主要介绍一个路由模块 @ohos.router,该模块提供了很多方式进行跳转页面,包括跳转到指定页面、替换当前页面、返回上一页,返回指定页(但官方并不推荐这种方式)

跳转指定页面

pushUrl

这种跳转方式:会保留当前页面,压入页面栈(目标页面会有返回按钮,可以返回上一个页面)

例如从首页 IndexPage 跳转到详情页 DetailPage,如下:

TypeScript 复制代码
import router from '@ohos.router'

router.pushUrl({
  url: 'pages/DetailPage'
})

replaceUrl

这种跳转方式:替换了当前页面,当前页面不会保留,销毁了当前页面

例如从登录页 LoginPage 跳转到首页 IndexPage,如下:

TypeScript 复制代码
import router from '@ohos.router'

router.replaceUrl({
  url: 'pages/IndexPage'
})

带参数的路由跳转

列表页面 ListPage.ets

从列表页 ListPage 跳转到详情页 DetailPage,调用方法时添加一个 params 属性,并传递列表项的 idname 作为参数

TypeScript 复制代码
import router from '@ohos.router'

interface TypeInterface {
  id: number;
  name: string;
}

@Entry
@Component
struct ListPage {
  @State listData: Array<TypeInterface> = [
    { id: 1, name: 'item1' },
    { id: 2, name: 'item2' }
  ]
  
  build() {
    Row() {
      Column() {
        ForEach(this.listData, (item: TypeInterface) => {
          Text(`列表条目:${item.name}`)
            .onClick(() => {
              router.pushUrl({
                url: 'pages/router/DetailPage',
                params: item
              })
            })
        })
      }
    }
  }
}

详情页 DetailPage.ets

详情页使用 router.getParams() 获取列表页传过来的参数

TypeScript 复制代码
import router from '@ohos.router'

interface TypeInterface {
  id: number;
  name: string;
}

@Entry
@Component
struct DetailPage {
  @State itemId: number = 0
  @State itemName: string = ''

  onPageShow() {
    let params = router.getParams() as TypeInterface
    if (params) {
      this.itemId = params.id
      this.itemName = params.name
    }
  }

  build() {
    Row() {
      Column() {
        Text(`详情页 - id:${this.itemId},name:${this.itemName}`)
      }
    }
  }
}

跳转命名路由页面

比如A页面跳转到B页面,如下:

B页面:

B页面需要使用 routeName 给这个页面命一个名字

TypeScript 复制代码
@Entry({ routeName: 'B' })

A页面:

A页面指定B页面的名字

TypeScript 复制代码
router.pushNameRouter({name: 'B'})

页面返回

  1. 返回上一页
js 复制代码
router.back()
  1. 返回指定页面
js 复制代码
router.back({
  url: 'pages/home'
})
  1. 返回到指定页面,并传递参数
js 复制代码
router.back({
  url: 'pages/home',
  params: {
    id: 1
  }
})

指定页面使用 router.getParams() 获取参数

某些场景

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

当在某些特殊场景的时候,监听到用户返回上一个页面,会做些提示处理。比如用户到了支付界面,没有支付完成,返回上个页面会进行提示,如下:

TypeScript 复制代码
onBackPress(){
  try {
    router.showAlertBeforeBackPage({
      message: '您还没有完成支付,确定要返回吗?'
    })
  } catch(err){
    console.error(`Invoke showAlertBeforeBackPage failed, code is ${err.code}, message is ${err.message}`)
  }
}

最后

文档地址

相关推荐
浩宇软件开发6 天前
基于DevEco鸿蒙开垃圾分类APP实现
harmonyos·arkts·arkui·垃圾分类·鸿蒙开发·deveco
zhuweisky25 天前
ArkTS实现鸿蒙手机视频聊天、屏幕分享(HarmonyOS)
音视频·harmonyos·鸿蒙开发
小学生波波1 个月前
HarmonyOS6 - 鸿蒙LED滚动字幕实战案例
arkts·鸿蒙·鸿蒙开发·harmonyos6·led滚动字幕
小学生波波1 个月前
HarmonyOS6 - 鸿蒙聊天页面语音转文字案例
arkts·聊天页面·语音转文字·鸿蒙开发·harmonyos6
小学生波波1 个月前
HarmonyOS6 - 鸿蒙录音实时转文字案例
鸿蒙·录音·鸿蒙开发·录音转文字·harmonyos6
小学生波波1 个月前
HarmonyOS6 - 鸿蒙ArkUI动画详解
华为·arkts·鸿蒙·arkui·鸿蒙开发·harmonyos6
小学生波波1 个月前
HarmonyOS6 - 鸿蒙读取系统联系人实战案例
arkts·鸿蒙开发·harmonyos6·读取联系人
小学生波波1 个月前
HarmonyOS6 - 鸿蒙双向滚动课程表案例
list·scroll·鸿蒙开发·课程表·harmonyos6
小学生波波1 个月前
HarmonyOS6 - 鸿蒙CustomDialog封装信息提示框
arkts·鸿蒙·鸿蒙开发·harmonyos6·信息提示框
小学生波波1 个月前
HarmonyOS - 鸿蒙开发百度地图案例
地图·百度地图·路线规划·鸿蒙开发·harmonyos6·鸿蒙地图·打点