赞
踩
本文主要讲的是如何在ArkUi红创建一个自定义的组件,并且在新的页面中引用,其实依旧是自定义函数,只是既可以在外部使用,也可以作为组件引入.
前面的文章中,已经对tab页面的内容编辑的差不多了,接下来需要编辑各个页面中的详情,比如“发现”页面,我们需要从后台拿到数据并且展示在上面,如果依旧放在了tab页面的话,会显得代码很乱,所以我们需要将其独立封装成一个组件,但是又可以作为一个独立的页面。
综上述,我们需要按照下图的方式,创建一个Page。
与直接创建一个ets的区别是,我们创建一个page的时候,编译器会将其自动写入main_pages.json中,该json页面的路径如下:
src/main/resources/base/profile/main_pages.json
创建出了一个新的页面之后,打开新建的ets文件的内容,修改代码如下:怎么修改不重要。主要就是跟待会的"Mine"页面能有区分。
@Entry @Component export struct Found { @State message: string = '这个是found页面' build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) } .width('100%') } .height('100%') } }
同样的方法,我们创建一个Mine.ets的文件,放置的是“我的”页面的内容。
接着,在我们的主页面中,我们需要引入这两个文件,引用方法如下
import { Found } from './found'
import { Mine } from './mine'
使用的方法如同Typescript的引入一样…
而我们是需要将其放置在TabContrent中的,因此,我们要这么去使用他,由于这儿不需要传入什么参数,所以直接用下面的方法就可以。
TabContent() {
Mine();
}
并且,需要在tabList中就定义好我们的组件,但由于我才疏学浅,且在官网上也没看到如何将组件动态的赋值,所以就只能通过笨方法来做if-else判断了。如下面的代码
TabContent() {
// 不知道怎么动态赋值ui,所以就直接做一个简单的if判断
if (item.component_name === "mine") {
Mine();
} else {
Found();
}
}
最后的tab页面的代码如下
import { Found } from './found' import { Mine } from './mine' @Entry @Component struct Index { @State currentIndex: number = 0 tabList: { name: string, component_name: string, unselected_icon: Resource, selected_icon: Resource }[] = [ { name: "发现", component_name: "found", unselected_icon: $r("app.media.found_unselect"), selected_icon: $r("app.media.found_select"), }, { name: "我的", component_name: "mine", unselected_icon: $r("app.media.mine_unselect"), selected_icon: $r("app.media.mine_select"), }] @Builder TabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) { Column() { Image(this.currentIndex === targetIndex ? selectedImg : normalImg) .size({ width: 25, height: 25 }) Text(title) .margin({ top: 5 }) .fontSize(16) .fontColor(this.currentIndex === targetIndex ? '#FFAA00' : '#3A9B78') } .width('100%') .height(50) .justifyContent(FlexAlign.Center) } build() { Tabs({ barPosition: BarPosition.End }) { ForEach(this.tabList, (item: any, index: number) => { TabContent() { // 不知道怎么动态赋值ui,所以就直接做一个简单的if判断 if (item.component_name === "mine") { Mine(); } else { Found(); } } .tabBar(this.TabBuilder(item.name, index, item.selected_icon, item.unselected_icon) ) .backgroundColor("#ccc") }) } .width("100%") .height("100%") .onChange((index) => { this.currentIndex = index }) } }
整体的效果如下
至此,ArkTs的Tab切换页面算是完成,接下来我们要去获取发现页面的信息以及我的页面的信息的,就需要分别在两个页面中去编写代码了。
至于当前组件中引入,是属于页面还是属于组件,会在涉及生命周期的章节中讲清楚。
主要介绍前端开发的博客,希望各位大佬们扫码关注
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。