首页 > 其他分享 >HarmonyOS NEXT应用开发之Tab组件实现增删Tab标签

HarmonyOS NEXT应用开发之Tab组件实现增删Tab标签

时间:2024-04-18 14:11:22浏览次数:25  
标签:... focusIndex ets tabArray NEXT HarmonyOS Tab 组件

介绍

本示例介绍使用了Tab组件实现自定义增删Tab页签的功能。该场景多用于浏览器等场景。

效果图预览

使用说明

  1. 点击新增按钮,新增Tab页面。
  2. 点击删除按钮,删除Tab页面。

实现思路

  1. 设置Tab组件的barHeight为0,隐藏组件自带的TabBar。
Tabs() {
  ...
}
.barHeight(0) // 隐藏tab组件自带的tabbar
  1. 使用@Link修饰符,将自定义TabBar组件和Tab组件通过focusIndex和tabArray进行双向绑定。
//TabSheetComponent.ets
@Component
struct TabSheetComponent {
  @Link tabArray: Array<number>
  @Link focusIndex: number

  build() {
    ...
  }
}
    
//HandleTabs.ets
@Component
struct HandleTabs {
  @State tabArray: Array<number> = [0]; // 控制页签渲染的数组
  @State focusIndex: number = 0; // Tabs组件当前显示的页签下标

  build() {
    ...

    TabSheetComponent({ tabArray: $tabArray, focusIndex: $focusIndex })
    Tabs({ index: this.focusIndex }) {
      ForEach(this.tabArray,()=>{
        ...
      })
    }

    ...
  }
}
  1. 在自定义TabBar中修改focusIndex和tabArray的值时,Tab组件根据数据变化进行对应UI变更
//TabSheetComponent.ets
Image('add') // 新增页签
  .onClick(() => {
    this.tabArray.push(item)
  })

...

Image('close') // 关闭指定索引页签
  .onClick(() => {
    this.tabArray.splice(index, 1)
  })

...

this.focusIndex = index; // 跳转到指定索引值

高性能知识点

本示例使用了ForEach进行数据懒加载,ForEach第三个入参keyGenerator唯一时,动态修改ForEach时,可降低渲染开销。

工程结构&模块类型

handletabs                                      // har包
|---model
|   |---constantsData.ets                       // 定义常量数据
|---pages                        
|   |---HandleTabs.ets                          // 增删tab页签功能实现页面
|   |---MenuBar.ets                             // 工具栏
|   |---TabSheetComponent.ets                   // 自定义TabBar组件

模块依赖

当前场景依赖common模块的FunctionDescription组件,主要用于功能场景文本介绍。详细可参考FunctionDescription文件。

参考资料

ForEach使用说明

Tabs组件使用说明

标签:...,focusIndex,ets,tabArray,NEXT,HarmonyOS,Tab,组件
From: https://www.cnblogs.com/HarmonyOSNext/p/18143392

相关文章

  • dremio SchemaMutability 简单说明
    dremioSchemaMutability属于一个枚举,定义了schema的可变性能力()参考定义publicenumSchemaMutability{@Tag(1)ALL(true,true,true,true), @Tag(2)NONE(false,false,false,false), @Tag(3)SYSTEM_TABLE(false,true,false......
  • ETL工具-nifi干货系列 第十四讲 nifi处理器QueryDatabaseTableRecord查询表数据实战教
    1、处理器QueryDatabaseTableRecord和处理器QueryDatabaseTable比较相似,该组件生成一个SQL查询,或者使用用户提供的语句,并执行它以获取所有在指定的最大值列中值大于先前所见最大值的行。QueryDatabaseTable的查询结果将被转换为Avro,而QueryDatabaseTableRecord的查询结果则被......
  • HarmonyOS NEXT应用开发之Axios获取解析网络数据
    介绍本示例介绍使用第三方库的Axios获取GBK格式的网络数据时,通过util实现GBK转换UTF-8格式。该场景多用于需要转换编码格式的应用。效果图预览使用说明直接进入页面就可获取GBK格式的用户名信息并进行解码操作。实现思路使用第三方库Axios获取网络数据,并将获取数据类型设......
  • HarmonyOS NEXT应用开发之图片缩放效果实现
    介绍图片预览在应用开发中是一种常见场景,在诸如QQ、微信、微博等应用中均被广泛使用。本模块基于Image组件实现了简单的图片预览功能。使用说明:双指捏合缩放图片大小双击图片进行图片的大小切换图片在放大模式下,滑动图片查看图片的对应位置效果图预览实现思路image组......
  • .net 通过特性及继承IValidatableObject完成自定义表单验证
    Model:publicclassPartAItem:IValidatableObject{[Required]publicstringTOKEN{get;set;}[Required]publicstringPROJECT_ID{get;set;}publicstringPART{get;set;}[Required]publicstringFORM_ID{get;set;......
  • HarmonyOS 优化布局性能
    背景介绍 用户界面(UI)布局是应用程序中至关重要的部分,它不仅影响应用的外观和用户体验,还直接影响应用的性能。不合理的布局可能会导致过度的布局计算和界面嵌套,从而增加渲染和计算的开销,导致性能下降。 常用布局方式 HarmonyOS的ArkUI框架提供了多种布局方式,包括线性布局......
  • HarmonyOS 性能优化
    如何合理使用动效来获得更好的性能组件转场动画使用transition:推荐使用转场动画(transition)而不是组件动画(animateTo),因为transition只需要在条件改变时更新一次,而animateTo需要在动画前后做两次属性更新,导致性能开销更大。反例:通过改变透明度属性并使用animateTo来......
  • 点击菜单生成tabs(vue3.0)
    1.安装vuex npminstallvuex@next--save在main.js中引用vuex2.在main.js同级目录新建store/store.js文件 代码:import{createStore}from'vuex'exportdefaultcreateStore({ state:{ tabsList:[] }, mutations:{ addTab(state,tab){ //判断是否......
  • HarmonyOS 项目 module.json5默认配置属性及描述
    module.json5entry>src>main>module.json5是模块的配置文件,包含当前模块的配置信息。 其中module对应的是模块的配置信息,一个模块对应一个打包后的hap包,hap包全称是HarmonyOSAbilityPackage,其中包含了ability、第三方库、资源和配置文件。其具体属性及其描述可以参照下表1。......
  • docker compose部署nextcloud
    dockercompose部署nextcloudversion:'3'services:nextcloud:image:nextcloudcontainer_name:nextcloudenvironment:-MYSQL_HOST=nextcloud-db-MYSQL_DATABASE=nextcloud-MYSQL_USER=nextcloud-MYSQL_PASSWOR......