首页 > 其他分享 >五、自定义组件

五、自定义组件

时间:2023-12-04 15:35:01浏览次数:32  
标签:自定义 content UI build 组件 isDone

1.创建自定义组件

在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行UI界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。

自定义组件具有以下特点:

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

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

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

/**
 * author:创客未来
 * copyright:com.ckFuture.hrb
 */
/**
 * 1:组件必须使用 @Component 装饰器
 * 2: @Entry 装饰哪个组件、哪个就呈现在页面上
 * 3: 被@Entry装饰的入口组件,build()中必须有且仅有一个**根容器**组件
 *    其他自定义组件,build()
 */
@Entry
@Component
struct Demo2 {
  @State message: string = '诗词学习'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        itemComponent()
        itemComponent({content:'我是传递字符串'})
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Component
struct itemComponent{
  // 自定义组件可以使用私有化变量(组件内部的变量都是私有化的,默认就是私有化) 传递参数
  private content: string = '默认字符串'
  build(){
    Row(){
      Image($r('app.media.icon'))
        .width(20)
        .height(20)
        .margin(15)
      Text(this.content)
    }
    .backgroundColor(Color.Pink)
    .borderRadius(25)
    .margin({
      top:15
    })
  }
}

 

 组件内部点击事件

/**
 * author:创客未来
 * copyright:com.ckFuture.hrb
 */
import FaultLogger from '@ohos.faultLogger'
/**
 * 1:组件必须使用 @Component 装饰器
 * 2: @Entry 装饰哪个组件、哪个就呈现在页面上
 * 3: 被@Entry装饰的入口组件,build()中必须有且仅有一个**根容器**组件
 *    其他自定义组件,build()
 */
@Entry
@Component
struct Demo2 {
  @State message: string = '诗词学习'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        itemComponent()
        itemComponent({content:'我是传递字符串'})
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Component
struct itemComponent{
  // 自定义组件可以使用私有化变量(组件内部的变量都是私有化的,默认就是私有化) 传递参数
  private content: string = '默认字符串'
  // 哪种情况可以驱动UI更新,@State
  @State isDone: boolean = false
  build(){
    Row(){
      Image(this.isDone?$r('app.media.iconOk'):$r('app.media.icon'))
        .width(20)
        .height(20)
        .margin(15)
      Text(this.content)
    }
    .backgroundColor(Color.Pink)
    .borderRadius(25)
    .margin({
      top:15
    })
    .onClick(()=>{
      //点击这一行修改图片
      this.isDone = !this.isDone
    })
  }
}

 

点击自定义组件,文字变化效果

@Component
struct itemComponent{
  // 自定义组件可以使用私有化变量(组件内部的变量都是私有化的,默认就是私有化) 传递参数
  private content: string = '默认字符串'
  // 哪种情况可以驱动UI更新,@State
  @State isDone: boolean = false
  build(){
    Row(){
      Image(this.isDone?$r('app.media.icon'):$r('app.media.icon'))
        .width(20)
        .height(20)
        .margin(15)
      Text(this.content)
        .decoration({
          type:this.isDone?TextDecorationType.LineThrough:TextDecorationType.None
        })
    }
    .backgroundColor(Color.Pink)
    .borderRadius(25)
    .margin({
      top:15
    })
    .onClick(()=>{
      //点击这一行修改图片
      this.isDone = !this.isDone
    })
  }
}

 

标签:自定义,content,UI,build,组件,isDone
From: https://www.cnblogs.com/ckfuture/p/17875052.html

相关文章

  • 第三方UI组件库的样式修改
    一、场景:    一般来说,我们在使用第三方UI组件库(如:vant,element-plus等)时,UI组件库自带的样式不能满足用户的个性化需求时,就需要我们开发人员自己动手对组件库的局部样式进行修改。二、修改UI组件库的顺序和方法1、修改主题1、修改主题:每个ui组件库都有专门的修改主题的解......
  • pipreqs 自动找到项目的所有组件和模块版本
    pipinstallpipreqs(适用于djangoFlask等)pipreqs./--encoding=utf-8找到当前项目目录下的所有组件和依赖H:\MyFlask>pipreqs./--encoding=utf-8十六.Flask基本项目目录搭建和pipreqs模块(组件和模块版本)virtualenv模块(创建虚拟环......
  • 滚动条自定义样式
    .ant-table-content{&::-webkit-scrollbar{height:10px!important;}&::-webkit-scrollbar-thumb{border-radius:0!important;}&::-webkit......
  • php8自定义扩展
    1:进入php源码目录下的ext.如/usr/local/php-8/ext2.生成自定义扩展的名字phpext_skel.php--extpython3.撰写函数原型,编辑python.stub.php3.1默认是test1,test2<?php/**@generate-function-entries*/functionall(array$arr):bool{}function......
  • 前端组件wolfTable的style格式文档
    此文档记录的是wolf-table的style格式文档,如果你找的是x-data-spreadsheet,那么请查阅这个文档https://www.cnblogs.com/WilsonZhu/p/17858411.htmlwolf-table的格式输入只有一个方式,通过调用addStyle以及cell函数来进行格式的改变例子如下:importTablefrom'@wolf-table......
  • Spring实践之自定义命名空间并解析
    自定义一个命名空间1、新建一个空项目,在resources/META-INF目录下新建一个spring.handlers文件,内容如下:http\://open.harvey.com/schema/dog=com.harvey.open.annotation.spring.DogNamespaceHandler文件内容为一个键值对。key为自定义命名空间:http://open.harvey.com/sc......
  • vue 弹窗组件
    vue弹窗<el-dialog></el-dialog>可以在其中编写所需的弹窗显示的内容也可以在其中放组件标签作为弹窗放一个组件的话,例:<el-dialogv-model="addGoodsDialog":title="addGoodsTitle"width="60%"destroy-on-close="true":close-on-p......
  • 仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能
    仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能一、引言随着电子商务的快速发展,用户体验成为了竞争的关键因素。在众多的电商网站中,如京东和淘宝,商品列表筛选功能为用户提供了便捷的途径来找到心仪的商品。本文将详细介绍如何使用cc-widget、uni-icons和xg-list......
  • 一篇随笔学习React18组件通信与插槽
    了解什么是jsx->https://www.cnblogs.com/senior-shef/p/17872695.html一、了解props1、什么是propsReact支持两种组件,DOM组件和React组件。DOM组件指的是所有的HTML和SVG标签。比如说,如果我们想要使用标签,在React中,可以设置src和alt等属性。这些属性与纯HTML写法相同。在Rea......
  • 自定义精美商品分类列表组件 侧边栏商品分类组件 category组件(适配vue3)
    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率......