鸿蒙UI复用

鸿蒙UI复用

  • 简介
  • Builder
    • Builder的使用方式一
    • Builder的使用方式二
    • Builder的使用方式三
  • Component
    • 使用Component复用UI

简介

在页面开发过程中,会遇到有UI相似的结构,如果每个UI都单独声明一份,会产生大量冗余代码,不利于阅读。遇到这样的情况,就需要针对相似的结构进行封装,封装后的UI只需要传入参数即可。
在鸿蒙开发中,可以使用Builder 和 Component两种方式来实现。

Builder
Component

Builder

Builder的使用方式一

在一个struct内部创建声明

@Entry
@Component
struct UiTest {build() {Column({space: 10}){this.listItem('标题1','子标题1')this.listItem('标题2','子标题2')this.listItem('标题3','子标题3')}.width('100%').height('100%').justifyContent(FlexAlign.Center)}@Builder listItem(title: string, subTitle: string) {Column(){Row(){Column({space:20}){Text(title).fontSize(20).fontWeight(FontWeight.Bold)Text(subTitle)}Blank()Image($r('app.media.icon_load')).width(30).height(30)}.width('100%')}.width('90%').shadow({radius: 10}).padding(10)}
}

在这里插入图片描述

上述代码中,创建了一个listItem的组件,展示标题和副标题,使用的时候,直接调用this.listItem(‘标题1’,‘子标题1’)即可。

Builder的使用方式二

在一个struct外部创建声明,在使用的时候,直接调用方法名,不再需要使用this.

@Entry
@Component
struct UiTest {build() {Column({space: 10}){listItem('标题1','子标题1')listItem('标题2','子标题2')listItem('标题3','子标题3')}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}
@Builder function listItem(title: string, subTitle: string) {Column(){Row(){Column({space:20}){Text(title).fontSize(20).fontWeight(FontWeight.Bold)Text(subTitle)}Blank()Image($r('app.media.icon_load')).width(30).height(30)}.width('100%')}.width('90%').shadow({radius: 10}).padding(10)
}

Builder的使用方式三

将@Builder的创建和声明放在一个单独的文件夹中,然后记得使用export

@Builder export  function listItem(title: string, subTitle: string) {Column(){Row(){Column({space:20}){Text(title).fontSize(20).fontWeight(FontWeight.Bold)Text(subTitle)}Blank()Image($r('app.media.icon_load')).width(30).height(30)}.width('100%')}.width('90%').shadow({radius: 10}).padding(10)
}

使用的时候,需要导入到当前文件夹

import { listItem } from './listItem'

接下来就直接使用方法名进行调用

Component

使用Component复用UI

Component的创建方式跟Builder创建方式二、创建方式三类似。

在一个单独文件中创建,需要使用export进行导出。

@Component
export struct listItem {title: stringsubTitle: stringbuild() {Column(){Row(){Column({space:20}){Text(this.title).fontSize(20).fontWeight(FontWeight.Bold)Text(this.subTitle)}Blank()Image($r('app.media.icon_load')).width(30).height(30)}.width('100%')}.width('90%').shadow({radius: 10}).padding(10)}
}

在使用的时候,首先需要进行导入

import {listItem} from './listItem'

参数的传递跟Builder有点不同,使用Component的方式传参,需要使用{}将参数包裹起来

import {listItem} from './listItem'
@Entry
@Component
struct UiTest {build() {Column({space: 10}){listItem({title:'标题1',subTitle:'子标题1'})listItem({title:'标题2',subTitle:'子标题2'})listItem({title:'标题3',subTitle:'子标题3'})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}

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

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

相关文章

Python头歌合集(题集附解)

目录 一、Python初识-基本语法 第1关:Hello Python! 第2关:我想看世界 第3关:学好Python 第4关:根据圆的半径计算周长和面积 第5关:货币转换 二、turtle简单绘图 第1关:英寸与厘米转换 第2关&#xff1…

vue-cli+vue3+vite+ts 搭建uniapp项目全过程(一)

unapp官方提供了cli 脚手架创建 uni-app 项目的文档 Vue3/Vite版要求 node 版本 18、20使用Vue3/Vite版创建不会提示选择模板,目前只支持创建默认模板 本文以vue3vitets为例 1、初始化项目 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project 执行完生成…

037——加入Kconfig机制

目录 一、什么是Kconfig 1.1 由来 1.2 功能 二、 Kconfig的基本语法 2.1 Kconfig 构建项目解析 2.2 怎么调用子makefile做menuconfig 方法一:使用make命令直接调用子目录 方法二:使用变量来指定子目录 方法三:使用include指令包含子…

Java openrasp记录-02

主要分析以下四个部分: 1.openrasp agent 这里主要进行插桩的定义,其pom.xml中定义了能够当类重新load时重定义以及重新转换 这里定义了两种插桩方式对应之前安装时的独立web的jar的attach或者修改启动脚本添加rasp的jar的方式 其中init操作则需要将ras…

大数据技术主要学什么,有哪些课程

大数据技术是指在海量数据的环境下,采集、存储、处理、分析和管理数据的一系列技术与方法。随着互联网、物联网以及各种智能设备的普及,数据量呈爆炸性增长,传统数据处理手段已难以应对,因此大数据技术应运而生,旨在从…

加州大学欧文分校英语中级语法专项课程04:Intermediate Grammar Project学习笔记(完结)

Intermediate Grammar Project Course Certificate Specialization Certificate Specialization Intro Course Intro 本文是学习 Coursera: Intermediate Grammar Project 这门课的学习笔记。 文章目录 Intermediate Grammar ProjectWeek 01: IntroductionCapstone Introducti…

论文笔记:DeepMove: Predicting Human Mobility with Attentional Recurrent Networks

WWW 2018 1 Intro 根据对百万级用户群的研究,93%的人类移动是可预测的。 早期的mobility预测方法大多基于模式的。 首先从轨迹中发现预定义的移动模式(顺序模式、周期模式)然后基于这些提取的模式预测未来位置。最近的发展转向基于模型的方法进行流动性预测。 利用…

力扣:62. 不同路径

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…

五一假期后,必读的10篇大模型论文

1.同时预测多个 token:更好更快的大型语言模型 目前,GPT 和 Llama 等大型语言模型(LLMs)都是通过下一个 token 预测损失来训练的。 在这项工作中,来自 Meta FAIR 的研究团队认为,训练语言模型同时预测多个…

用 Go map 要注意这个细节,避免依赖他!

有的小伙伴没留意过 Go map 输出、遍历顺序,以为它是稳定的有序的,会在业务程序中直接依赖这个结果集顺序,结果栽了个大跟头,吃了线上 BUG。 有的小伙伴知道是无序的,但却不知道为什么,有的却理解错误? 今…

PADS 规则设置-导线不跟随器件-导线允许回路

1、PADS Layout中设置拖动器件时导线不跟着移动 2、PADS Router中设置走线允许回路

【隧道篇 / WAN优化】(7.4) ❀ 01. 启动WAN优化 ❀ FortiGate 防火墙

【简介】几乎所有的人都知道,防火墙自带的硬盘是用来保存日志,以方便在出现问题时能找到原因。但是很少的人知道,防火墙自带的硬盘其实还有另一个功能,那就是用于WAN优化。 防火墙自带的硬盘 在FortiGate防火墙A、B、C、D系列&…

【备战软考(嵌入式系统设计师)】04-嵌入式软件架构

嵌入式操作系统 嵌入式系统有以下特点: 要求编码体积小,能够在有限的存储空间内运行。 面向应用,可以进行裁剪和移植。 用于特定领域,可以支持多任务。 可靠性高,及时响应,无需人工干预独立运行。 实…

软件全套资料整理包获取-软件各阶段支撑文档

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

动手写一个简单的Android 表格控件支持固定列

Android 动手写一个简洁版表格控件 简介 源码已放到 Github Gitee 作为在测绘地理信息行业中穿梭的打工人,遇到各种数据采集需求,既然有数据采集需求,那当然少不了数据展示功能,最常见的如表格方式展示。 当然,类似…

大模型时序预测初步调研20240506

AI预测相关目录 AI预测流程,包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

MySQL —— 表的基本操作

一、创建 1.语法 create table 表名称( 自定义变量1, 自定义变量2, 自定义变量3(最后一个变量末尾不需要加任何标点符号) )charset字符集 collate校验集 engine存储引擎; ps:若是不具体给字符集、校验集、储存引擎,则采用配置文件…

『跨端框架』Flutter环境搭建

『跨端框架』Flutter环境搭建 资源网站简介跨平台高性能发展历程跨平台框架的比较成功案例 环境搭建(windows)基础环境搭建Windows下的安卓环境搭建Mac下的安卓环境配置资源镜像JDKAndroid StudioFlutter SDK问题一问题二问题三修改项目中的Flutter版本 …

厂家自定义 Android Ant编译流程源码分析

0、Ant安装 Windows下安装Ant: ant 官网可下载 http://ant.apache.org ant 环境配置: 解压ant的包到本地目录。 在环境变量中设置ANT_HOME,值为你的安装目录。 把ANT_HOME/bin加到你系统环境的path。 Ubuntu下安装Ant: sudo apt…

visio studio 中.NET Core(.net8.0)框架和.net framewok 框架有什么区别?

更新vs到2022版本后,新建项目时就多出不少选项,这里来个大家分享下.NET Core(.net8.0)框架和.net framewok的区别 如下图,不带后缀的就是使用.NET Core框架,后续选项是.net8.0。 .net framewok框架选项&am…