鸿蒙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: string
  subTitle: string
  build() {
    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)
  }
}

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

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

相关文章

ai可以做思维导图吗?当然是可以的!

ai可以做思维导图吗?在快节奏的现代生活中,思维导图作为一种高效的信息组织和表达工具,越来越受到人们的青睐。随着人工智能(AI)技术的不断发展,AI思维导图软件也应运而生,它们不仅能够帮助用户…

软件接口测试规范流程

1、需求分析 1.1 确认测试目的和测试对象: 了解需求并明确测试目的,如测试一个本地 API 还是跨网站的远程 API。 1.2 确认测试的基本条件: 确定测试所需的测试数据,测试环境以及测试团队中的角色和职责。 1.3. 对接口文档进行验证&#xf…

兄弟DCP-7057激光打印机报错误代码EC检修及分析

故障描述: 兄弟DCP-7057激光打印机屏幕显示无法打印EC关闭电源,然后重新打开打印机。 故障检修及分析: 1、定影单元风扇的插线连接不良 检查定影单元风扇的插线连接并重新连接; 2、定影单元风扇故障 更换定影单元风扇&#xff1b…

Segmentation fault (core dumped)排查

先泼盆冷水,这个问题比较棘手,有的能通过重装opencv相关包修复,有的可能还是直接换一个没问题的环境比较快…… 我最后是没有解决的,折腾了几个小时后,还是听同事的话,把docker镜像重启了,幸好…

day04—java基础之方法详解

方法概述 方法是具有特定功能的代码集合,由于我们是把重复的代码写到方法当中,以后要用直接调用方法即可,不需要再写一遍了。代码相当于只写了一遍。所以可以提高代码的复用性。如果要修改代码,我们也只要修改一处即可&#xff0…

JavaSwing技术实现一个电子表程序

使用JavaSwing技术实现一个简单的电子表盘,如下所示。 下载链接 有兴趣的读者可以点击链接下载,博主承诺绝对真实有效。

bert-NER 转化成 onnx 模型

保存模型 加载模型 from transformers import AutoTokenizer, AutoModel, AutoConfigNER_MODEL_PATH ./save_model ner_tokenizer AutoTokenizer.from_pretrained(NER_MODEL_PATH) ner_config AutoConfig.from_pretrained(NER_MODEL_PATH) ner_model AutoModelForTokenCl…

VIsualGDB : 快速入门系列

《VisualGDB : 解决编码导致的编译错误》 《VisualGDB : 在windows上开发和调试Linux代码(一)》 《VisualGDB:为Linux项目添加系统依赖库》 《VisualGDB:Linux动态库项目创建、编译及库的使用》 《VisualGD…

Web3空投入门:如何增加空投成功的几率

今天分享空投如何避免限制以提高效率,增加成功几率,首先我们来了解什么是空投加密,有哪些空投类型。 一、什么是空投加密? 加密货币空投是一种营销策略,包括向用户的钱包地址发送免费的硬币或代币。 加密货币项目使用…

Linux网络编程(三)IO复用三 epoll系统调用

三、epoll系统调用 epoll是Linux特有的I/O复用函数。它在实现和使用上与select、poll有很大差异。 epoll使用一组函数来完成任务,而不是单个函数epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无须像select和poll那样每次调用都要…

Python从0到POC编写--实用小脚本

UrlCheck: 假设我们要对一份 url 列表进行访问是不是 200 , 量多的话肯定不能一个一个去点开看, 这个时候我们可以借助脚本去判断, 假如有一份这样的列表, 这份列表呢,奇奇怪怪,有些写错了…

Golang——Strconv包

func ParseBool(str string) (value bool, err error) strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数:Atoi(),Itoa(),parse系列函数,format系列函数,append系列函数。 1.1 string与…

6份不用辞职就能赚钱的副业,上班族必看!

在这个经济浪潮中,生活成本的上升与工资增长的缓慢形成了鲜明对比。对于许多上班族来说,寻找额外收入的途径显得尤为迫切。 今天,就让我们一起探索那些适合在业余时间开展的副业,为你的财务自由之路添砖加瓦。 1. 闲鱼二手手机售卖…

SEO之高级搜索指令(三)

初创企业需要建站的朋友看这篇文章,谢谢支持: 我给不会敲代码又想搭建网站的人建议 新手上云 (接上一篇。。。。) 11、link: link:也是SEO 常用的指令,用来搜索某个url的反向链接,既包括内部链接&#xf…

python编程“常识”【pip安装路径、计算、pycharm中的terminal运行前面的PS修改成自己环境】

一、默认的pip install包路径: pip show pip 二、计算 打开cmd,输入: ipython 例如你要计算2的13次方: ok. 三、pycharm中的terminal运行前面的PS修改成自己环境 未修改前: 修改过程: 打开设置找到too…

渗透之sql注入---宽字节注入

宽字节注入原理: 宽字节注入就是在对用户输入进行处理时,将编码方式改变,当某些关键字符被过滤(转义)时,我们可以使用其他的编码在被转义的字符前面,这样就可以组成一个新的字符从而来实现绕过…

【备战软考(嵌入式系统设计师)】10 - 软件工程基础

这一部分的内容是概念比较多,不要理解,去感受。 涉及的知识点是嵌入式系统开发和维护的部分,也就是和管理相关的,而不是具体如何进行嵌入式系统开发的细节。 系统开发生命周期 按照顺序有下面几个阶段,我们主要要记…

WPF容器控件之WrapPanel、布局控件

WrapPanel: 换行panel 子元素进行换行&#xff0c;当子元素的宽度或者高度超出了父元素&#xff0c;才进行换行。高度超出父元素的高度 也会另起一列 属性 Orientation布局方式 实例 <WrapPanel Orientation"Horizontal"><Label>C# 是从 C/C 衍生出来的…

zabbix动作执行命令失效不起作用?

1. zabbix在web界面设置完主机组&#xff0c;主机&#xff0c;监控项&#xff0c;触发器&#xff0c;动作之后 监控项监控到了&#xff0c;触发器触发动作&#xff0c;但是执行的指令不起作用 流程 在zabbix-agent端将nginx服务down掉&#xff0c;zabbix会自动监控并执行重启的…

一文了解Memcache内存分配机制及stats参数

一、Memcache内存分配机制 了解memcached必须了解的三个单位&#xff1a;page、slabs、chunk。 1.1、Page Page为内存分配的最小单位,Memcached的内存分配以page为单位&#xff0c;默认情况下一个page是1M&#xff0c;可以通过-I参数在启动时指定。如果需要申请内存 时&#…