学习鸿蒙基础(4)

1.条件渲染
ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用if、else和else if渲染对应状态下的UI内容。
当if、else if后跟随的状态判断中使用的状态变量值变化时,条件渲染语句会进行更新。。

@Entry
@Component
struct PageIfElse {@State list: Object [] = []build() {Row() {Column() {Button("onClick").onClick(()=>{this.list=[{ id: 1, name: "房子",type:1 },{ id: 2, name: "车子",type:2 },{ id: 3, name: "票子",type:3} ,{ id: 1, name: "理想",type:1 },{ id: 2, name: "现实",type:2 },{ id: 3, name: "梦想",type:3}]})if(this.list.length){List(){ForEach(this.list,(item:Object)=>{ListItem(){getOrder(item)}.margin(10)},item=>JSON.stringify(item))}.height(200)}else{Text("三无青年")}}.width('100%')}.height('100%')}
}@Builder
function  getOrder(item){Row(){Text(item["name"]).fontSize(18).fontColor("#333333")if(item["type"]==1){Text("一座").fontSize(19).fontColor(Color.Red)}else if(item["type"]==2){Text("二辆").fontSize(19).fontColor(Color.Red)}else if(item["type"]==3){Text("三捆").fontSize(19).fontColor(Color.Red)}}.justifyContent(FlexAlign.SpaceBetween).width("100%")
}

 2.自定义组件

在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行Ul界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。
自定义组件具有以下特点:
1、可组合:允许开发者组合使用系统组件、及其属性和方法。
2、可重用:自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容器中使用。
3、数据驱动UI更新:通过状态变量的改变,来驱动UI的刷新。


struct:自定义组件基于struct实现,struct +自定义组件名+..}的组合构成自定义组件,不能有继承关系。对于struct的实例化,可以省略new。
@Component: @Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,需要实现build方法描述UI,一个struct只能被一个@Component装饰。
@Entry: @Entry装饰的自定义组件将作为UI页面的入口。在单个UI页面中,最多可以使用@Entry装饰一个自定义组件。
build()函数中需注意: build()函数用于定义自定义组件的声明式UI描述,自定义组件必须定义build()函数。
build()函数下的根节点唯一且必要,且必须为容器组件,其中ForEach禁止作为根节点。build()函数下:
1、不允许声明本地变量。
2、不允许在UI描述里直接使用console.info(),但允许在方法或者函数里使用。
3、不允许调用没有用@Builder装饰的方法。
4、不允许switch语法,如果需要使用条件判断,请使用if。
5、不允许使用表达式,比如三目运算。

 代码示例:

自定义组件需要新建一个components的文件夹。将自定义组件拷贝在里面。


import Item from '../model/Item';
//自定义组件  组件与组件之间是隔离的
@Component
struct myList {private item: Item;private index: number;private list: Item [];@State isChecked:boolean =falsebuild() {Row() {Checkbox().onChange(v=>{console.log(v.toString())this.isChecked=v})Text(this.item.text).fontSize(20).decoration({type:this.isChecked?TextDecorationType.Underline:TextDecorationType.None,color:Color.Blue})Button("删除").backgroundColor(Color.Red).onClick(() => {this.list.splice(this.index, 1)})}.justifyContent(FlexAlign.SpaceBetween).width("100%")}
}export default myList

自己新建的对象需要新建一个model文件夹。对象是普通的ts文件。


class Item {id: number;text: string;constructor(id: number, text: string) {this.id = idthis.text = text}
}export  default Item

DEMO运行效果如下

 自定义组件demo如下:

import myList from '../components/myList'
import Item from '../model/Item'
@Entry
@Component
struct PageIfElse {@State text: string = ''@State list: Item [] = [new Item(Date.now(), "房子"),new Item(Date.now(), "车子")]build() {Row() {Column() {Row() {TextInput({ text: this.text }).width(250).onChange((value) => {this.text = value})Button("增加").onClick(() => {this.list.push(new Item(Date.now(), this.text))this.text = ""}).margin(10)}.width("100%").justifyContent(FlexAlign.SpaceBetween).margin(10)List() {ForEach(this.list, (item, index) => {ListItem() {myList({ item, index, list: this.list })}.margin(10)})}.layoutWeight(1).divider({strokeWidth: 1,color: Color.Blue,startMargin: 10,endMargin: 10}).width('100%')}}.height('100%')}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

统信操作系统下数据库管理利器

PL/SQL是一款荷兰公司开发的数据库管理软件,尽管只支持Oracle一种数据库,但是在这一种数据库的支持上深度耕耘了30年,做到了Oracle管理的极致,从而拥有量海量的用户。 当然,随着时间的推移,PL/SQL也出现了一…

鸿蒙-基于ArkTS声明式开发的简易备忘录,适合新人学习,可用于大作业

本文地址:https://blog.csdn.net/qq_40785165/article/details/136161182?spm1001.2014.3001.5502,转载请附上此链接 大家好,我是小黑,一个还没秃头的程序员~~~ 不知不觉已经有很长一段时间没有分享过自己写的东西了&#xff0…

QPainter绘图与QPen、QFont及QBrush详细用法

一.基本绘图属性: 1.基本绘图类: Qt的绘图功能基于QPainter、QPainterDevice和QPainterEngine三个类。QPainter类在窗口和其他绘制设备上执行低级绘制。它提供高度优化的功能来完成大多数图形用户界面程序所需的工作,包括绘制基本的点、线、…

阿里云 OSS

阿里云对象存储服务(Object Storage Service,简称 OSS) OSS 为 Object Storage Service,即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 OSS 具有与平台无关的 RESTful API 接口,可以在任…

深度学习(16)--基于经典网络架构resnet训练图像分类模型

目录 一.项目介绍 二.项目流程详解 2.1.引入所需的工具包 2.2.数据读取和预处理 2.3.加载resnet152模型 2.4.初始化模型 2.5.设置需要更新的参数 2.6.训练模块设置 2.7.再次训练所有层 2.8.测试网络效果 三.完整代码 一.项目介绍 使用PyTorch工具包调用经典网络架构…

vue3项目配置按需自动导入API组件unplugin-auto-import

场景应用:避免写一大堆的import,比如关于Vue和Vue Router的 1、安装unplugin-auto-import npm i -D unplugin-auto-import 2、配置vite.config import AutoImport from unplugin-auto-import/vite//按需自动加载API插件 AutoImport({ imports: ["…

项目发布前如何打tag标签及标签命名规范

项目发布前如何打tag标签及标签命名规范 1.问题背景 我们知道git分支可以理解为一系列提交流水组成的线,如果我们开发的项目到了一个比较重要的阶段,比如项目发布上线,处于方便后期代码的追溯和维护的考虑,如何在繁杂的日志提交…

一般小红书种草达人多少钱,投放注意事项

在互联网时代,小红书成为了广大消费者了解、评价和分享美妆、服饰、生活方式等方面的平台之一。平台上诸多用户的种草帖,已经成为了很多人发现新品、了解产品真实情况的重要渠道。同时众多品牌也纷纷加入了进来,今天我们和大家来分享下一般小…

力扣面试150 验证回文串 双指针 Character API

Problem: 125. 验证回文串 文章目录 思路复杂度Code 思路 👨‍🏫 参考题解 Character.isLetterorDigit(char c):判读字符 c 是否是字母或者数字 Character.toLowerCase(char c):将字符 c 转换为小写字母 复杂度 时间复杂度: …

51_蓝桥杯_数码管静态显示

一 电路 二 数码管静态显示工作原理 三 代码 代码1 实现第一个数码管显示数字6的功能 #include "reg52.h"unsigned char code SMG_Duanma[18] {0xc0,0xf9.0xa4,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc0,0x86,0x8e,0xbf,0x7f};void Delay(unsignde int t) {wh…

【微服务生态】Docker

文章目录 一、基础篇1. 简介2. 下载与安装3. 常用命令3.1 帮助启动类3.2 镜像命令3.3 容器命令 4. Docker 容器数据券5. Docker 镜像5.1 commit 生成镜像5.2 Docker Registry5.3 发布镜像 6. Docker 常规安装软件 二、高级篇1. Dockerfile1.1 概述1.2 基础知识1.3 Dockerfile常…

【大模型 向量库】从向量搜索到向量数据库

大模型向量库 向量:AI核心向量库:语义近似搜索大模型 向量库YOLO 向量数据库嵌入(Embedding)设计最近邻搜索近似近邻搜索 主流向量数据库Milvus 实践 向量:AI核心 向量伴随着 AI 模型的发展而发展。 向量&#xff…