HarmonyOS 开发-Tab组件实现增删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
     @Link focusIndex: number
   
     build() {
       ...
     }
   }
       
   //HandleTabs.ets
   @Component
   struct HandleTabs {
     @State tabArray: Array = [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组件,主要用于功能场景文本介绍。

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=21730,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?