HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

news2024/11/15 8:41:05

自定义组件的生命周期

允许在生命周期函数中使用 Promise 和异步回调函数,比如网络资源获取,定时器设置等;

页面生命周期

即被@Entry 装饰的组件生命周期,提供以下生命周期接口:

onPageShow

页面加载时触发,页面每次显示时触发一次,包括路由过程、应用进入前台等场景。

onPageHide

从第一个页面跳转第二个页面后,第一个页面会最为后台,触发onPageHide生命周期

页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。
下面是代码尝试

LifeCycle页面

import router from '@ohos.router'
@Entry
@Component
struct LifeCycle {
  @State message: string = '第一页'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(25)
        Divider()
        Button('Next').onClick(() => {
          router.pushUrl({url:'pages/LifeCycle2'})
        })
          .fontSize(25)
      }
      .width('100%')
    }
    .height('100%')
  }
  onPageShow() {
    console.log('第一页:——onPageShow')
  }

  onPageHide() {
    console.log('第一页:——onPageHide')
  }

  onBackPress() {
    console.log('第一页:——onBackPress')
  }
}

LifeCycle2页面

import router from '@ohos.router'

@Entry
@Component
struct LifeCycle2 {
  @State message: string = '第二页'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(25)
        Divider()
        Button('Back').onClick((event: ClickEvent) => {
          router.back()
        })
          .fontSize(25)

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

  onPageShow() {
    console.log('第二页:——onPageShow')
  }

  onPageHide() {
    console.log('第二页:——onPageHide')
  }

  onBackPress() {
    console.log('第二页:——onBackPress')
  }
}

效果的话大家可以从 DevEco Studio 左下角第四个日志中查看具体效果。

onBackPress

监听物理返回键,也就是手机上的回退,并不是路由连接router.back()的返回.
请添加图片描述

组件生命周期

一般用@Component 装饰的自定义组件的生命周期,提供以下生命周期接口:

aboutToAppear

在 build 构建之前渲染此生命周期。
详解:aboutToAppear 函数在创建自定义组件的新实例后,在执行其 build()函数之前执行。允许在 aboutToAppear 函数中改变状态变量,更改将在后续执行 build()函数中生效。

aboutToDisappear

组件销毁时触发,例如删除,移出等操作。
详解:aboutToDisappear 函数在自定义组件析构销毁之前执行。不允许在 aboutToDisappear 函数中改变状态变量,特别是@Link 变量的修改可能会导致应用程序行为不稳定。

例:

import router from '@ohos.router'

@Entry
@Component
struct LifeCycle {
  @State message: string = '第一页'
  @State status: boolean = true

  build() {
    Row() {
      Column({ space: 20 }) {
        Text(this.message)
          .fontSize(25)
        Divider()
        Button('Next').onClick(() => {
          router.pushUrl({ url: 'pages/LifeCycle2' })
        })
          .fontSize(25)
        Divider()
        if (this.status) {
          LifeCycle_son()
        }
        Button('上段文字显示/隐藏').onClick(() => {
          this.status = !this.status
        }).fontSize(25)
      }
      .width('100%')
    }
    .height('100%')
  }

  onPageShow() {
    console.log('第一页:——onPageShow')
  }

  onPageHide() {
    console.log('第一页:——onPageHide')
  }

  onBackPress() {
    console.log('第一页:——onBackPress')
  }
}

@Component
struct LifeCycle_son {
  build() {
    Column() {
      Text('我是第一页的一个子组件')
        .fontSize(30)
    }
  }
  // aboutToAppear函数在创建自定义组件的新实例后,在执行其build()函数之前执行。
  aboutToAppear() {
    console.log('我是第一页的一个子组件:aboutToAppear')
  }

  // aboutToDisappear函数在自定义组件析构销毁之前执行。
  aboutToDisappear() {
    console.log('我是第一页的一个子组件:aboutToDisappear')
  }
}

请添加图片描述

点击两次上段文字显示/隐藏按钮
依次出现上述的生命周期为:
请添加图片描述

可以看到,如果将组件删除的话就可以触发aboutTodisappear生命周期
再次点击显示时触发aboutToAppear生命周期。当然默认的话会先触发aboutToAppear,因为他默认组件LifeCycle_son是先存在的。

页面路由

路由跳转

router.pushUrl({ url: "路径" });

路由传参

router.pushUrl({
  url: "/pages/LifeCycle2",
  params: {
    id: 1,
    username: "Southern Wind",
    age: 18,
  },
});

接受参数username,在LifeCycle2页面router.getParams()

let username = router.getParams()['username'] as string

效果:
请添加图片描述

应用之间传参

公共数据共享创建参数

// 应用程序数据共享
AppStorage.Set('message','我要玩原神')
AppStorage.SetOrCreate('message2','Southern Wind')

其他页面获取此数据

let name:string = AppStorage.Get('message2')

注意:此Api需要用真机进行调试,模拟器没有效果的!!

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

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

相关文章

UE5 C++ 学习笔记 UBT UHT 和 一些头文件

总结一些似懂非懂的知识点,从头慢慢梳理。 任何一个项目都有创建这些三个.cs。 这个是蓝图转C 这个是本身就是C项目,应该就是多了一个GameModeBase类 Build.cs包含了每个模块的信息,表明了这个项目用到了哪一些模块。该文件里的using UnrealBuilTool 是…

路由器结构

路由器是连接互联网的设备,本文主要描述路由器的结构组成。 如上所示,OSI(Open System Interconnect)开放系统互联参考模型是互联网架构的标准协议栈,由ISO标准组织制定。自底向上,互联网架构分为7层&#…

Gitee作为远程仓库保存Vue项目

1.先在gitee上创建仓库 2.本地创建vue项目 3. 将本地项目与远程仓库进行关联 依次执行以下命令 # 进入到项目所在目录 cd vue-rabbit # 将项目变成git项目, 运行命令会在该目录下生成 .git文件 git init# 本地仓库与远程仓库进行关联 git remote add origin 你项目的远程地址…

vue+springboot(前后端分离项目)

目录 JAVA后端项目 一、创建项目 1、使用aliyun的server url 2、初始化项目结构 3、添加依赖 4、创建文件夹 5、把mapper类交给spring容器管理 5.1、方法1 5.2、方法2 6、在yaml文件中配置数据库信息 7、在yaml文件中配置mapper的xml文件的路径 8、配置mapper的xml文…

Django开发_13_静态资源、cookie/session/token

一、在html文件下的操作 (一)在html中添加{% load static %}标签,加载static模块 (二)使用{%static "图片地址" %}动态生成静态资源URL 二、csrf跨站请求伪造 在账号登录的html文件中相应位置要加上{% csr…

转转交易猫自带客服多模板全开源完整定制版源码

商品发布; 请在后台商品添加成功后, 再点击该商品管理,可重新编辑当前商品的所有信息及配图以及支付等等相关信息 可点击分享或者跳转,将链接地址进行发布分享 请在手机端打开访问 访问商品主要模板文件路径目录 咸鱼&#…

K8S-YAML

一、Kubernetes对象的描述 kubernetes中资源可以使用YAML描述(如果您对YAML格式不了解,可以参考YAML语法),也可以使用JSON。其内容可以分为如下四个部分: typeMeta:对象类型的元信息,声明对象…

软件是什么?前端,后端,数据库

软件是什么? 由于很多东西没有实际接触,很难理解,对于软件的定义也是各种各样。但是我还是不理解,软件开发中的前端,后端,数据库到底有什么关系呢! 这个问题足足困扰了三年半,练习时…

创建SERVLET

创建SERVLET 要创建servlet,需要执行以下任务: 编写servlet。编译并封装servlet。将servlet部署为Java EE应用程序。通过浏览器访问servlet。编写servlet 要编写servlet,需要扩展HttpServlet接口的类。编写servlet是,需要合并读取客户机请求和返回响应的功能。 读取和处…

基于Mcrosemi M2S090T FPGA 的 imx991 SWIR的SLVS解码(一)

目录 一、平台介绍 二、器件的简介 1、imx991 SWIR Image Sensor 2、M2S090T 三、工程 1、imx991寄存器配置 一、平台介绍 工程开发平台:Libero Version:20231.0.6 Release:v2023.1 文本编辑器:Sublime text3 二、器件的简介 1、imx991 SWIR I…

K8s调试积累

文章目录 一、K8S 集群服务访问失败?二、K8S 集群服务访问失败?三、K8S 集群服务暴露失败?四、外网无法访问 K8S 集群提供的服务?五、pod 状态为 ErrImagePull?六、探测存活 pod 状态为 CrashLoopBackOff?七…

postman导入https证书

进入setting配置中Certificates配置项 点击“Add Certificate”,然后配置相关信息 以上配置完毕,如果测试出现“SSL Error:Self signed certificate” 则将“SSL certificate verification”取消勾选

【车载开发系列】Autosar DCM诊断管理模块

【车载开发系列】Autosar DCM诊断管理模块 【车载开发系列】Autosar DCM诊断管理模块 【车载开发系列】Autosar DCM诊断管理模块一. DCM模块概念二. DCM模块与Autosar其他模块关系1)Dcm和PduR的交互2)Dcm和ComM模块的交互3)Dcm和Dem的交互4&a…

Maven(五)如何只打包项目某个模块及其依赖模块?

目录 一、背景二、解决方案三、补充3.1 提出疑问3.2 解答 一、背景 在 SpringCloud 微服务框架下,会存在多个模块。当我们需要对其中某一个服务打包的时候,需要将该服务依赖的模块一起打包更新,如果项目比较小的话我们可以直接将项目中的所有…

C++ memmove 学习

memmove&#xff0c;将num字节的值从源指向的位置复制到目标指向的内存块。 允许目标和源有重叠。 当目标区域与源区域没有重叠则和memcpy函数功能相同。 宽字符版本是wmemmove&#xff0c;安全版本加_s&#xff1b; #include "stdafx.h" #include<iostream&g…

Addressables(2) ResourceLocation和AssetReference

IResourceLocation var op Addressables.LoadResourceLocationsAsync(key); var result op.WaitForCompletion(); 把加载的Key塞进去&#xff0c;不难看出&#xff0c;IResourceLocation可以用来获得资源的详细信息 很适合用于更新分析&#xff0c;或者一些检查工具 AssetR…

three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera</title><script src"ThreeJS/three.js"></script><script src&qu…

LLMs之Vanna:Vanna(利用自然语言查询数据库的SQL工具+底层基于RAG)的简介、安装、使用方法之详细攻略

LLMs之Vanna&#xff1a;Vanna(利用自然语言查询数据库的SQL工具底层基于RAG)的简介、安装、使用方法之详细攻略 目录 Vanna的简介 1、用户界面 2、RAG vs. Fine-Tuning 3、为什么选择Vanna&#xff1f; 4、扩展Vanna Vanna的安装和使用方法 1、安装 2、训练 (1)、使用…

IPv6--ACL6(IPv6访问控制列表--基本ACL6配置)

ACL基本原理 ACL由一系列规则组成,通过将报文与ACL规则进行匹配,设备可以过滤出特定的报文。 ACL的组成 ACL编号: 在网络设备上配置ACL时,每个ACL都需要分配一个编号,称为ACL编号,用来标识ACL。不同分类的ACL编号范围不同,这个后面具体讲。 规则: 前面提到了,一个AC…

vectorCast——Probe point 功能实现故障注入,局部变量打印,断点调试。

选择一个测试用例,选择coverage窗口进行查看。点击edit probe point,如图所示绿色的小圆圈。选代码中选择需要打断点的地方进行点击。黑色的小圆点都可以选。点击黑色小圆点,小圆点变绿,表示打断点成功。此时就可以根据自己的需求在打断点的位置编写一些C语言的命令语句。点…