当前位置: 首页 > article >正文

鸿蒙仓颉开发语言实战教程:自定义组件

关于仓颉开发语言我们已经连续分享了很多天,相信大家对于仓颉开发语言已经有了一定的了解。今天我们继续进阶,分享一个仓颉开发语言中的自定义组件知识。

本文案例就以上一篇文章中的自定义tabbar为例,因为我们自己开发的tabbar一直放在index.cj文件中总是不太好的,还是要把它拿出来封装一下。

为了较大型项目的文件管理,我在cangjie文件夹下创建了components文件夹,然后在这里创建组件文件,我创建的是yltabbar.cj.

创建文件之后,可以看到依然是初始化了一行代码,我们还是把四大引用拿过来,然后添加build方法,注意自定义组件就不需要@Entry来修饰了,只用@Component:


internal import ohos.base.*
internal import ohos.component.*
internal import ohos.state_manage.*
import ohos.state_macro_manage.*
@Component
public class yltababar {func build() {}
}

然后把tabbar的内容复制到build方法下。

现在如果我们想要给自定义组件传递一些参数,比如tabbar的元素列表,你就可以这样写:

var tabList: Array<TabItem>

这是一个父子单向传递的参数,只能由父组件传递给自组件。我们还有一个参数currenttabIndex,用来记录当前选择的元素序号,这个参数在父组件中也需要用到,这时候就需要使用@Link修饰符:

@Link var currenttabIndex:Int64

现在就可以在页面中使用组件并传递参数了:

yltababar(tabList:this.tabList,currenttabIndex:this.currenttabIndex)

最后跟大家分享封装组件的完整代码:

package ohos_app_cangjie_entry.components
internal import ohos.base.*
internal import ohos.component.*
internal import ohos.state_manage.*
import ohos.state_macro_manage.*
import cj_res_entry.app
import ohos_app_cangjie_entry.model.TabItem
import std.os.posix.link
import std.console.Console
@Component
public class yltababar {var tabList: Array<TabItem>@Link var currenttabIndex:Int64var controller: TabsController = TabsController()func build() {Row {ForEach(this.tabList, itemGeneratorFunc: {item: TabItem, index: Int64 =>Column {if(this.currenttabIndex == index){Image(item.selectIcon).width(28).height(28)Text(item.title).fontSize(15).fontColor(0xd84642).margin(top: 3)}else {Image(item.icon).width(28).height(28)Text(item.title).fontSize(15).fontColor(Color.GRAY).margin(top: 3)}}.onClick({evet => this.currenttabIndex = index;this.controller.changeIndex(Int32(this.currenttabIndex))})})}.width(100.percent).height(60).alignItems(VerticalAlign.Center).justifyContent(FlexAlign.SpaceAround)}
}

 #HarmonyOS语言##仓颉##购物# 

相关文章:

鸿蒙仓颉开发语言实战教程:自定义组件

关于仓颉开发语言我们已经连续分享了很多天&#xff0c;相信大家对于仓颉开发语言已经有了一定的了解。今天我们继续进阶&#xff0c;分享一个仓颉开发语言中的自定义组件知识。 本文案例就以上一篇文章中的自定义tabbar为例&#xff0c;因为我们自己开发的tabbar一直放在inde…...

基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

opencvsharp usb摄像头录像 c# H264编码

1.首先创建ConsoleApp&#xff0c;.Net 9.0&#xff0c;不要创建WinForm 。WInForm帧率和实际对不上&#xff0c;有延时。 2.下载opencvsharp。 3.下载openh264-1.8.0-win32.dll , openh264-1.8.0-win64.dll .放在根目录。 https://github.com/cisco/openh264 using OpenCv…...

ch12 课堂参考代码 及 题目参考思路

课堂参考代码 Bellman-Ford 主要思路&#xff1a;对所有的边进行 n-1 轮松弛操作 单源最短路算法&#xff0c; O ( n m ) O(nm) O(nm) using ll long long; const int maxn 5010, maxm 5010; struct Edge {int u, v, w; } E[maxm]; // d[u]: 当前 s 到 u 的最短路 ll d[m…...

uniapp 实现腾讯云 IM 消息已读回执

uniapp 实现腾讯云 IM 消息已读回执处理全攻略 一、功能实现原理 腾讯云 IM 的已读回执功能通过 消息已读上报机制 实现&#xff0c;核心流程如下&#xff1a; 接收方阅读消息时&#xff0c;客户端自动上报已读状态云端记录最新已读时间戳&#xff08;精确到会话维度&#x…...

JavaScript 性能优化按层次逐步分析

JavaScript 性能优化实战 &#x1f4a1; 本文数据基于Chrome 136实测验证&#xff0c;涵盖12项核心优化指标&#xff0c;通过20代码案例演示性能提升300%的实战技巧。 一、代码层深度优化 1. 高效数据操作&#xff08;百万级数据处理&#xff09; // 不良实践&#xff1a;频繁…...

三分钟打通Stable Diffusion提示词(附实战手册)

文章目录 一、提示词的本质是"思维翻译器"避坑指南1&#xff1a;三大常见翻车现场 二、结构化提示词公式&#xff08;抄作业版&#xff09;实战案例&#xff1a;生成赛博朋克猫咪 三、进阶玩家的秘密武器1. 权重控制大法2. 风格融合黑科技3. 时间轴控制 四、避不开的…...

【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;Linux篇–CSDN博客 文章目录 一.序列化和反序列化为什么需要序列化和反序列化为什么应用层…...

RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试

RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试 硬件背景说明编译环境准备1. 编译MPP(媒体处理平台)2. 编译RGA(图形加速库)3. 构建支持硬件加速的FFmpeg重要代码修改说明4. 验证安装5.FFmpeg转码测试OpenCV编译集成Python OpenCV+FFmpeg测试硬件背景说明 RK3588是瑞芯微推出…...

特伦斯 S75 电钢琴:奏响极致音乐体验的华丽乐章

在音乐爱好者增多、音乐教育普及&#xff0c;以及科技进步的推动下&#xff0c;电钢琴市场蓬勃发展。其在技术、品质和应用场景上变化巨大&#xff0c;高端化、个性化产品受青睐&#xff0c;应用场景愈发多元。在此背景下&#xff0c;特伦斯 S75 电钢琴以卓越性能和独特设计&am…...

硬件学习笔记--64 MCU的ARM核架构发展及特点

MCU&#xff08;微控制器&#xff09;的ARM核架构是当前嵌入式系统的主流选择&#xff0c;其基于ARM Cortex-M系列处理器内核&#xff0c;具有高性能、低功耗、丰富外设支持等特点。以下是ARM核MCU的主要架构及其发展&#xff1a; 1. ARM Cortex-M系列内核概览 ARM Cortex-M系…...

div或button一些好看实用的 CSS 样式示例

1&#xff1a;现代渐变按钮 .count {width: 800px;background: linear-gradient(135deg, #72EDF2 0%, #5151E5 100%);padding: 12px 24px;border-radius: 10px;box-shadow: 0 4px 15px rgba(81, 81, 229, 0.3);color: white;font-weight: bold;border: none;cursor: pointer;t…...

USB充电检测仪-2.USB充电检测仪硬件设计

本系列文章的最终目标是制作一个USB充电检测仪&#xff0c;支持的功能&#xff1a; 显示USB充电电压、电流、功率、充电量&#xff08;单位WH&#xff09;&#xff1b;实现Typec口和USB-A口的相互转换&#xff08;仅支持USB 2.0&#xff09;&#xff1b; 当然网上有很多卖这种…...

如何查询服务器的端口号

要查询服务器上某个服务正在使用的端口号&#xff0c;可以使用几个不同的工具和方法&#xff0c;具体方法取决于你对服务器的访问权限以及具体的操作系统。以下是一些常用的方法&#xff1a; 1. 在Linux系统上 1.1 使用 netstat 命令&#xff08;需要管理员权限&#xff09;&…...

AU6815集成音频DSP的2x25W数字型ClaSS D音频功率放大器(替代TAS5805)

1.特性 ● 输出配置 - 立体声 2.0: 2x25W (8Ω,21V,THD N 1%) - 立体声 2.0: 2x23W (6Ω, 18V,THD N 1%) ● 供电电压范围 - PVDD:4.5V-21V - DVDD: 1.8V 或者 3.3V ● 静态功耗 - 31.5mA at PVDD12V,BD - 18.5mA at PVDD12V,1SPW ● 音频性能指标 - Noise: ≤38uVrms - TH…...

DeepSeek R1开源模型的技术突破与AI产业格局的重构

引言​ 2025年&#xff0c;中国AI企业深度求索&#xff08;DeepSeek&#xff09;推出的开源模型DeepSeek-R1&#xff0c;以低成本、高性能和开放生态为核心特征&#xff0c;成为全球人工智能领域的技术焦点。这一模型不仅通过算法创新显著降低算力依赖&#xff0c;更通过开源策…...

打破认知壁垒重构科技驱动美好生活 大模型义务传播计划

这是一份从 CUDA 到 Agentic AI 的大模型算法工程师学习路线图&#xff0c;旨在帮助你系统地构建成为一名优秀大模型算法工程师所需的知识体系。 阶段一&#xff1a;基础夯实 &#x1f9f1; 这个阶段的目标是掌握编程、数学和机器学习的基础知识&#xff0c;为后续的深度学习和…...

【Web应用】 Java + Vue 前后端开发中的Cookie、Token 和 Swagger介绍

文章目录 前言一、Cookie二、Token三、Swagger总结 前言 在现代的 web 开发中&#xff0c;前后端分离的架构越来越受到欢迎&#xff0c;Java 和 Vue 是这一架构中常用的技术栈。在这个过程中&#xff0c;Cookie、Token 和 Swagger 是三个非常重要的概念。本文将对这三个词进行…...

本地部署AI工作流

&#x1f9f0; 主流 RAG / 工作流工具对比表&#xff08;含是否免费、本地部署支持与资源需求&#xff09; 工具名类型是否支持 RAG可视化目标用户是否免费支持本地部署本地部署一般配置Dify企业级问答系统平台✅✅非技术 & 企业用户✅ 免费版 商业版✅ 支持2C4G 起&…...

什么是VR全景相机?如何选择VR全景相机?

VR全景相机的定义、原理及特点 定义&#xff1a;VR全景相机是利用特殊镜头设计和图像处理技术&#xff0c;能够捕捉到360度全方位、无死角的高清影像&#xff0c;并通过虚拟现实技术将用户带入沉浸式全景环境的相机设备。 原理&#xff1a;VR全景相机通过集成多个鱼眼镜头&am…...

如何创建和使用汇编语言,以及下载编译汇编软件(Notepad++,NASM的安装)

一、汇编语言基础&#xff1a;用文本文档(Windows自带)初步尝试 1. 什么是汇编语言&#xff1f; 汇编语言是一种面向处理器&#xff08;CPU&#xff09;的低级编程语言&#xff0c;通过助记符&#xff08;如MOV、ADD&#xff09;直接控制硬件。它需要通过编译器&#xff08;如…...

c++设计模式-单例模式

C++ 设计模式 - 单例模式详解 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这种模式在软件开发中非常常见,适用于需要全局唯一实例的场景,如配置管理器、日志记录器、数据库连接池等。 单例模式的基本实现 在 C++ 中,…...

Ubuntu开机自动运行Docker容器中的Qt UI程序

Ubuntu开机自动运行Docker容器中的Qt UI程序 引言为什么需要这样配置?解决方案概览详细实现步骤1. 创建容器启动脚本2. 创建系统服务3. 配置自动登录和显示设置常见问题解决方案1. 程序无法显示(X11权限问题)2. 分辨率设置不生效3. 服务启动失败安全注意事项结语附录:完整文…...

Python训练营打卡Day40(2025.5.30)

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout # 先继续之前的代码 import torch import …...

SpringBoot+vue+SSE+Nginx实现消息实时推送

一、背景 项目中消息推送&#xff0c;简单的有短轮询、长轮询&#xff0c;还有SSE&#xff08;Server-Sent Events&#xff09;、以及最强大复杂的WebSocket。 至于技术选型&#xff0c;SSE和WebSocket区别&#xff0c;网上有很多&#xff0c;我也不整理了&#xff0c;大佬的链…...

python中使用高并发分布式队列库celery的那些坑

python中使用高并发分布式队列库celery的那些坑 &#x1f31f; 简单理解&#x1f6e0;️ 核心功能&#x1f680; 工作机制&#x1f4e6; 示例代码&#xff08;使用 Redis 作为 broker&#xff09;&#x1f517; 常见搭配&#x1f4e6; 我的环境&#x1f4e6;第一个问题&#x1…...

哈工大计算机系统大作业 程序人生-Hello’s P2P

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机与电子通信 学   号 2023111772 班   级 23L0503 学 生 张哲瑞     指 导 教 师 …...

计算机一次取数过程分析

计算机一次取数过程分析 1 取址过程 CPU由运算器和控制器组成&#xff0c;其中控制器中的程序计数器(PC)保存的是下一条指令的虚拟地址&#xff0c;经过内存管理单元(MMU)&#xff0c;将虚拟地址转换为物理地址&#xff0c;之后交给主存地址寄存器(MAR)&#xff0c;从主存中取…...

Halcon联合QT ROI绘制

文章目录 Halcon 操纵界面代码窗口代码 Halcon 操纵界面代码 #pragma once#include <QLabel>#include <halconcpp/HalconCpp.h> #include <qtimer.h> #include <qevent.h> using namespace HalconCpp;#pragma execution_character_set("utf-8&qu…...

力扣面试150题--二叉树的右视图

Day 53 题目描述 思路 采取层序遍历&#xff0c;利用一个high的队列来保存每个节点的高度&#xff0c;highb和y记录上一个节点的高度和节点&#xff0c;在队列中&#xff0c;如果队列中顶部元素的高度大于上一个节点的高度&#xff0c;说明上一个节点就是上一层中最右边的元素…...