HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例

HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例

声明式 UI

ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。

如果组件的接口定义没有包含必选构造参数,则组件后面的“()”不需要配置任何内容。例如,Divider组件不包含构造参数(下划线组件

$r`形式引入应用资源,可应用于多语言场景

struct 内部无需用 let 声明,外部需要用 let 声明

使用 Stage 模型的应用,需要在module.json5配置文件中声明权限。
例如加载网络图片,语法:

Image(src: string | Resource | media.PixelMap)

加载本地资源

Image("images/view.jpg").width(200);

加载网络图片需要申请权限
在这里插入图片描述

Image(
  "https://profile-avatar.csdnimg.cn/63cdb1329d9e45b49ccbc25c10e23baf_nanchen_j.jpg!1"
); // 实际使用时请替换为真实地址
@Entry
@Component
struct DeclarativeUi {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text('声明式UI')
        Divider()
        Image('https://profile-avatar.csdnimg.cn/63cdb1329d9e45b49ccbc25c10e23baf_nanchen_j.jpg!1')
          .width(100)
          .height(100)

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

实际效果:
在这里插入图片描述

Resource 资源
使用资源格式可以跨包/跨模块引入图片,resources 文件夹下的图片都可以通过$r 资源接口读取到并转换到 Resource 格式。

Image($r("app.media.icon"));

也可以将图片放在rawfile文件夹下
其中:$r代表的是资源类型,app.media为应用程序下的媒体资源

链式编程

一条一条编写,类似于JQuery

Text("声明式UI").fontSize(40).fontColor(Color.Green);

事件方法

动态监听值的变化,例:

@Entry
@Component
struct DeclarativeUi {
  @State num:number = 3
  build() {
    Row() {
      Column() {
        Text('声明式UI'+this.num)
          .fontSize(40)
          .fontColor(Color.Green)
        Divider()

        Button('click++').onClick(()=>{
          this.num++
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Entry
@Component
struct DeclarativeUi {
  num:number = 3 // 不会具有响应式
}

注意:在struct中声明变量动态绑定需要用到@Struct,否则不会是响应式

private

定义私有变量,写法:

private content:string = 'Southern Wind'

自定义组件

当我们需要写多个文本不同但样式相同的效果,需要使用自定义组件来实现,下面是需要注意的几点

  1. @Component:@Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,需要实现build方法描述UI,一个struct只能被一个@Component装饰。
  2. @Entry 放在哪个组件前面,哪个就在页面上显示
  3. Entry组件中,build()中必须有且只有一个更组件
  4. 自定义组件必须定义build()函数

定义一个itemComponent的组件

@Component
struct itemComponent{
  //  private私有变量
  private content:string = 'Southern Wind'
  build(){
    // @ts-ignore
    Row(){
      Image($r('app.media.gray'))
        .width(30)
        .height(30)
        .margin(15)
      Text(this.content)
        .fontSize(30)
        .fontColor(Color.White)

    }
    .backgroundColor(Color.Gray)
    .borderRadius(20)
    .padding({
      right:20
    })
    .margin({
      top:15
    })
  }
}

在主组件中渲染


@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        Divider()
        itemComponent()
        itemComponent({
          content:'我是第二个文本'
        })
        itemComponent()
        itemComponent()
      }
      .width('100%')
    }
    .height('100%')
  }
}

效果:

请添加图片描述

这里可以看到,自定义组件定义的变量在渲染第二次的时候可以被赋值替换

自定义组件具有以下特点

可组合:允许开发者使用系统组件、及其属性和方法

可复用:自定义组件可以被其他组件复用,并作为不同的实例在不同的父组件或容器中使用。

数据驱动UI更新:通过状态变量的改变,来驱动UI的刷新。

@Component
struct itemComponent{
  //  private私有变量
  private content:string = 'Southern Wind'

  @State isStatus:boolean = false

  build(){
    // @ts-ignore
    Row(){
      Image(this.isStatus ?$r('app.media.gray'):$r('app.media.gou'))
        .width(30)
        .height(30)
        .margin(15)
      Text(this.content)
        .fontSize(30)
        .fontColor(Color.White)

    }
    .backgroundColor(Color.Gray)
    .borderRadius(20)
    .padding({
      right:20
    })
    .margin({
      top:15
    })
    .onClick(()=>{
      this.isStatus = !this.isStatus
    })
  }
}

图片交互时渲染可以采用三元表达式的写法进行书写

效果:

请添加图片描述

添加下滑线:TextDecorationType文本枚举类型

  .decoration({
    type:TextDecorationType.None
  })

请添加图片描述

完整代码及效果:


@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        Divider()
        itemComponent()
        itemComponent({
          content:'我是第二个文本'
        })
        itemComponent()
        itemComponent()
      }
      .width('100%')
    }
    .height('100%')
  }
}



@Component
struct itemComponent{
  //  private私有变量
  private content:string = 'Southern Wind'

  @State isStatus:boolean = true

  build(){
    // @ts-ignore
    Row(){
      Image(this.isStatus ?$r('app.media.gray'):$r('app.media.gou'))
        .width(30)
        .height(30)
        .margin(15)
      Text(this.content)
        .fontSize(30)
        .fontColor(Color.White)
        .decoration({
          type:this.isStatus ?TextDecorationType.LineThrough :TextDecorationType.None,
          color:Color.Black
        })

    }
    .backgroundColor(Color.Gray)
    .borderRadius(20)
    .padding({
      right:20
    })
    .margin({
      top:15
    })
    .onClick(()=>{
      this.isStatus = !this.isStatus
    })
  }
}

请添加图片描述
图标:请添加图片描述
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iOS代码混淆工具

目录 引言 混淆效果 字符串加密 代码插入 其他混淆选项说明 总结 参考资料 🔒 这是一篇介绍iOS代码混淆工具的技术博客,旨在帮助开发者提高代码安全性。本工具来自于Github的混淆词库和代码,通过差异化处理和代码合并生成数亿种用于混淆…

什么是SpringMvc、SpringMvc23道常提到问题

1、什么是 SpringMvc? 答:SpringMvc 是 spring 的一个模块,基于 MVC(模型、视图、控制器) 的一个框架,无需中间整合层来整合。 扩展: 在Spring MVC中,各个组件的职责如下: 1.Model(模…

振弦读数模块开发时的要点

振弦读数模块开发时的要点 振弦读数模块是振弦采集仪中重要的组成部分,以下是开发时需要注意的要点: 1. 确定采样频率和精度:振弦采集仪必须以足够高的频率和精度采集振弦信号,以确保数据的准确性和完整性。 2. 选择合适的传感器…

「Verilog学习笔记」占空比50%的奇数分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 根据题意7分频,实际上是第一次电平变化经历了4个上升沿3个下降沿,第二次电平变化是4个下降沿3个上升沿,所以用两个计数器就行了。分别对…

【Python动漫系列】喜羊羊(完整代码)

文章目录 喜羊羊环境需求完整代码程序分析系列文章喜羊羊 喜羊羊是中国大陆一部儿童动画片《喜羊羊与灰太狼》中的主角之一。这部动画片自2005年开始播出,成为许多中国儿童最喜欢的动画之一。 喜羊羊是一只体型较小、毛色洁白的绵羊,性格机灵活泼,聪明机智。他是一只勇敢而…

树_二叉树所有路劲

//给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 // // 叶子节点 是指没有子节点的节点。 // // 示例 1: // // //输入:root [1,2,3,null,5] //输出:["1->2->5&quo…

Cmkae外部依赖管理

文章目录 一、cmake依赖管理介绍二、源码依管理1. FetchContent与find_package进行集成 2. CPM3. git submodule附加: address_sanitizer 和 undefined sanitizer 一、cmake依赖管理介绍 CMake 是跨平台的构建系统,支持 C/C、Objective-C、Fortran 等多种…

mysql中除了InnoDB以外的其它存储引擎

参考资料:https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html MyISAM存储引擎 https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html MyISAM 存储引擎是基于比较老的ISAM存储引擎(ISAM已经不再可用)&#xff…

CSS模块化的理解

说起css模块化,那么先来看看它的发展吧! 发展历程 从Web技术来讲 Web 1.0:Web 起源于上世纪 90 年代,当时主要是静态页面,内容呈现形式单一,浏览器技术也比较简单。Web 1.0 的网站主要提供信息传递和查找…

Java Web 学习之路(2) —— 概念、SpringBoot + MyBatis(controller+service+mapper)开发流程与过程梳理

文章目录 前言1. 常见的一些概念1.1 POJO(Plain Ordinary Java Object 简单Java对象)1.2 DAO和Mapper 2. Java的三层架构2.1 包的层级结构2.2 交互层 controller(用户界面、网页)jsp文件2.3 业务处理层 service2.4 Mapper层 3. 注…

认识DHT11温湿度传感器并制作温度报警器

Arduino UNO Arduino IDE开发环境 Arduino DHT11温湿度传感器 ​ 一、认识Arduino的DHT11温度湿度传感器 DHT传感器由电容式湿度传感器和热敏电阻两部分组成。除此之外,模块内部还有一些模拟信号到数字信号的转换,将温度湿度以数字信号的方式输…

[oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙

回忆 上次 了解了 python 语言的特点 历史悠久功能强大深受好评已成趋势 3大主流操作系统 macwindowslinux 我们 选择 linux 作为基础系统 为什么选择 黑乎乎的命令行界面呢?🤔 GUI vs CLI 个人电脑 用图标和菜单组成 图形界面(GUI) Graphic User I…

电容、电感和电阻

一、电感 1)图片 2)作用 a)储存容量 例如dcdc转换器的原理,将一个电压值转换成另外一个电压值 b)选择信号 比如空气中弥漫着很多信号,我们应该怎么选取我们所需要的信号。 电感和电容可以看成一个电阻,当电…

基于springboot实现的垃圾分类管理系统

一、系统架构 前端:html | layer | jquery | css 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven 二、 代码及数据库 三、功能介绍 01. 登录页 02. 系统设置-用户管理 03. 系统设置-页面管理 04. 系统设置-角色管…

015 OpenCV 霍夫变换(圆检测)

目录 一、环境 二、算法原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、算法原理 霍夫圆检测(Hough Circle Detection)是计算机视觉中一种常用的图像处理技术,主要用于检测…

fpga rom 初始化文件的一些心得

目录 可能遇到的问题 问题 解决方案 rom的初始化 用途 文件类型 如何生成初始化文件 示例 Altera Xilinx 可能遇到的问题 问题 altera FPGA的rom找不到初始化文件,编译过程会提示类似的问题 Error(127001): Cant find Memory Initialization File or He…

中通快递单号查询入口,并分析筛选出揽收中转延误件

批量查询中通快递单号的物流信息,并将其中的揽收中转延误件(从“揽收”至“到达转运中心”之间的时间差超过24小时的单号)分析筛选出来。 所需工具: 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤: 步骤1:运行【快递…

【Docker实操】创建一个Nginx服务

一、不使用DockerFile 1、获取nginx官方镜像 docker pull nginx //拉取nginx官方镜像 docker image nginx //查看镜像2、创建项目目录 项目目录:/root/www2/nginx //如果当前目录在root mkdir www2 mkdir www2/nginx cd www2/nginx //进入项目目录3、创建源码文…

产品经理面试问题(四)

今天和大家免费分享产品经理常见的面试题目,含回答思路分析和回答事例。 【资源下载】 这个模板可以在 Axure高保真原型哦 小程序里免费下载 打开小程序后,在文档模板模块,搜索产品经理面试题目,获取下载地址 更多原型模板、视…

护眼灯什么光对眼睛好?适合考研党用的台灯推荐

如今,大多数人的日常工作和学习都离不开电子设备,长时间盯着屏幕容易造成眼睛疲劳和视力下降。全国近视率占多数的还是青少年,护眼台灯作为一种照明设备,具有调节光线亮度和色温的功能,可以有效减少眼睛的疲劳&#xf…