华为HarmonyOS NEXT 原生应用开发:页面路由、页面和组件生命周期函数

页面路由、组件生命周期

一、路由的基本使用

1. 如何新建页面
  1. 直接右键新建Page。【这个是最直接最常用的】
  2. 新建普通ets文件,然后通过配置变成页面。 【该方法是遇到这种情况的解决方案】
2. 路由 - 页面之间的跳转
  1. 使用 **router.pushUrl({})**进行跳转
ts 复制代码
import { router } from '@kit.ArkUI'
@Entry
@Component
struct Login {
  build () {
    Column() {
      Text('登录页')
        .fontSize(66)
      // 点击按钮,从登录页跳转到首页
      Button('登录(跳转首页)')
        .onClick(() => {
          router.pushUrl({
            url: 'pages/Index'
          })
        })
    }
  }
}
  1. 使用 router.replaceUrl({}) 进行跳转(该方法不能返回
ts 复制代码
import { router } from '@kit.ArkUI'
@Entry
@Component
struct Login {
  build () {
    Column() {
      Text('登录页')
        .fontSize(66)
      // 点击按钮,从登录页跳转到首页
      Button('登录(跳转首页)')
        .onClick(() => {
          router.replaceUrl({
            url: 'pages/Index'
          })
        })
    }
  }
}
  1. 使用 router.back 进行页面返回
  • 实际开发中,登录成功跳转首页是不能再返回的,这里是示例代码!
ts 复制代码
import { router } from '@kit.ArkUI'

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text('首页')
        .fontSize(66)
      Button('返回登录页面')
        .onClick(() => {
          router.back()  // 需要注意:该方法一般不会和 replaceUrl方法配合使用
        })
    }
  }
}
3. 页面栈

页面栈:就如同弹夹一样,先进后出原则。

  1. router.pushUrl: 就像当于是将子弹一直往弹夹里面装,及时返回到栈里面有的页面依旧会累加进栈。
  2. router.replaceUrl: 装一个子弹,打一个子弹,栈里面只会保留当前的页面,所以,router.back方法无法使用。
  1. router.getLength() 获取页面栈长度
ts 复制代码
import { router } from '@kit.ArkUI'

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text('首页')
        .fontSize(66)
      Button('获取页面栈长度')
        .onClick(() => {
          let num: string = router.getLength() // 获取页面栈长度
          console.log('页面栈长度为', num)
        })
    }
  }
}
  1. router.clear() 清空页面栈清空页面栈
ts 复制代码
import { router } from '@kit.ArkUI'

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text('首页')
        .fontSize(66)
      Button('清空页面栈')
        .onClick(() => {
          router.clear() // 清空页面栈
        })
    }
  }
}
4. 路由模式
5. 路由传参

我们 在 A 页面 跳转到 B 页面的同时,携带 A 页面数据跳转过去,B页面可以去除携带过来的数据包。

第一步: 在 A 页面,传递一个 params 对象(将数据打包传递给B)

ts 复制代码
      // 点击按钮,从登录页跳转到首页
      Button('携带参数跳转首页')
        .onClick(() => {
          router.pushUrl({
            url: 'pages/Index',
            // 数据打包成对象,丢过去!
            params: {
              username: this.username,
              password: this.password
            }
          })
        })

第二步: 取出数据包

  • 数据传递过来,需要通过类型断言,并且数据名字保持一致!
ts 复制代码
import { router } from '@kit.ArkUI'

// 创建接口,指定携带过来数据包的类型
interface UserInformation {
  username: string,
  password: string
}

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text('首页')
        .fontSize(66)
      Button('获取A页面传递过来的数据')
        .onClick(() => {
          // 获取数据包,记得类型断言。否则报错
          let getUserData: UserInformation = router.getParams() as UserInformation
          // 输出数据内容
          console.log('数据包内容为:', getUserData.username + '-' + getUserData.username)
        })
    }
  }
}

二、生命周期函数(页面、组件)

1. 页面生命周期函数
2. 组件生命周期函数
  • 需要注意的是, @Entry修饰的是不是也可以使用组件的生命周期函数呀!
相关推荐
音视频牛哥31 分钟前
SmartMediaKit 鸿蒙NEXT GB28181设备接入SDK
华为·harmonyos·鸿蒙gb28181·鸿蒙next gb28181·鸿蒙gb28181接入·鸿蒙接入gb28181平台·鸿蒙执法记录仪gb28181
云水一下1 小时前
企业跨地域安全通信实战:预共享密钥方式建立点到点加密隧道
安全·华为·ipsec vpn·下一代防火墙
网络与设备以及操作系统学习使用者3 小时前
ARP报文保护触发与解决详解
运维·网络·学习·华为
key_3_feng3 小时前
鸿蒙车规级MCU开发方案
单片机·华为·harmonyos
大雷神4 小时前
HarmonyOS APP<<古今职鉴定>>开源教程第14篇:碰一碰分享:NFC 近场通信
华为·华为云·harmonyos
想你依然心痛5 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“智流工坊“——低代码可视化智能体编排平台
低代码·华为·harmonyos
richard_yuu5 小时前
鸿蒙ArkUI组件化实战|公共组件封装、复用解耦与上架级UI规范落地
ui·华为·harmonyos
AI周红伟5 小时前
Token工厂落地:移动,电信,华为,阿里,从流量到Token,All in Token
大数据·人工智能·百度·华为·copilot·openclaw
KKei16386 小时前
Flutter for OpenHarmony 学习专注模式APP技术文章
学习·flutter·华为·harmonyos
想你依然心痛6 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“数字孪生工坊“——工业制造AI智能体协同平台
人工智能·制造·harmonyos