眩疝诺 发表于 2025-6-3 00:30:05

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

关于仓颉开发语言我们已经连续分享了很多天,相信大家对于仓颉开发语言已经有了一定的了解。今天我们继续进阶,分享一个仓颉开发语言中的自定义组件知识。
本文案例就以上一篇文章中的自定义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.componentsinternal import ohos.base.*internal import ohos.component.*internal import ohos.state_manage.*import ohos.state_macro_manage.*import cj_res_entry.appimport ohos_app_cangjie_entry.model.TabItemimport std.os.posix.linkimport std.console.Console@Componentpublic class yltababar {    var tabList: Array<TabItem>    @Link var currenttabIndex:Int64    var 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语言##仓颉##购物# 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

皮仪芳 发表于 2025-10-19 00:41:32

喜欢鼓捣这些软件,现在用得少,谢谢分享!

靳夏萱 发表于 2025-12-7 08:30:00

谢谢分享,试用一下

左优扬 发表于 2025-12-22 14:42:37

新版吗?好像是停更了吧。

连热 发表于 2025-12-27 09:31:23

新版吗?好像是停更了吧。

凤患更 发表于 2026-1-6 08:10:34

收藏一下   不知道什么时候能用到

烯八 发表于 2026-1-16 20:29:05

收藏一下   不知道什么时候能用到

渭茱瀑 发表于 2026-1-17 23:44:34

热心回复!

郗燕岚 发表于 2026-1-18 14:33:54

鼓励转贴优秀软件安全工具和文档!

豹筒生 发表于 2026-1-21 01:09:55

分享、互助 让互联网精神温暖你我

拓炊羡 发表于 2026-1-21 13:55:13

分享、互助 让互联网精神温暖你我

创蟀征 发表于 2026-1-26 19:39:46

不错,里面软件多更新就更好了

存叭 发表于 2026-1-26 21:27:01

过来提前占个楼

搁胱 发表于 2026-1-28 04:05:54

感谢分享

庾签 发表于 2026-1-29 02:45:03

这个有用。

刘凤 发表于 2026-1-30 00:46:03

感谢分享,下载保存了,貌似很强大

姨番单 发表于 2026-2-4 04:06:32

过来提前占个楼

普料飕 发表于 2026-2-4 04:15:00

分享、互助 让互联网精神温暖你我

赶塑坠 发表于 2026-2-4 09:52:22

很好很强大我过来先占个楼 待编辑

煞赶峙 发表于 2026-2-5 04:47:55

谢谢分享,试用一下
页: [1] 2
查看完整版本: 鸿蒙仓颉开发语言实战教程:自定义组件