HarmonyOS NEXT应用开发之Tab组件实现增删Tab标签
介绍
本示例介绍使用了Tab组件实现自定义增删Tab页签的功能。该场景多用于浏览器等场景。
效果图预览

使用说明:
- 点击新增按钮,新增Tab页面。
- 点击删除按钮,删除Tab页面。
实现思路
- 设置Tab组件的barHeight为0,隐藏组件自带的TabBar。
Tabs() {
...
}
.barHeight(0) // 隐藏tab组件自带的tabbar
- 使用@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,()=>{
...
})
}
...
}
}
- 在自定义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文件。
参考资料
写在最后
- 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新VIP学习资源,请移步前往小编:
https://qr21.cn/FV7h05

HarmonyOS NEXT应用开发之Tab组件实现增删Tab标签的更多相关文章
- Android开发之Menu组件
菜单Menu大致分为三种类型:选项菜单(OptionsMenu),上下文菜单(ContextMenu),子菜单(SubMenu). 1.选项菜单 在一个Activity界面中点击手机Menu键,在屏幕 ...
- Android安全开发之ZIP文件目录遍历
1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在“../”的字符串,攻击者可以利用多个“../”在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件.如果被覆盖掉的文件是动态链接s ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android开发之旅5:应用程序基础及组件
引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...
- Android开发之旅4:应用程序基础及组件
引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...
- SPA项目开发之tab页实现
实现思路及细节 1.利用前面博客所讲的Vuex的知识:定义几个变量 Options:存放tab页对象的容器(主要是路由路径以及tab页的名字) activeIndex:被激活的tab页路由路径 sho ...
- C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用
概述 最近几天一直在关注WinFrom方面的文章主要还是园子里伍华聪的博客,在看看我们自己写的项目差不忍赌啊,有想着提炼一下项目的公共部分,公共部分有分为 界面,类库两方面,今天主要是把界面 ...
- C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用
概述 转自 http://www.cnblogs.com/luomingui/archive/2013/09/19/3329763.html 最近几天一直在关注WinFrom方面的文章 有想着提炼一下 ...
- Android Studio快速开发之道
概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. P ...
- Cocos2d-x 3.x游戏开发之旅
Cocos2d-x 3.x游戏开发之旅 钟迪龙 著 ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...
随机推荐
- 初识uds之abstract socket
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 无 前言 在<记一次有趣的hwclock ...
- python面向对象(多态)
# 1.什么是多态:同一事物有多种形态 class Animal: # 同一类事物:动物 def talk(self): pass class Cat(Animal): # 动物的形态之一:猫 def ...
- MySQL varchar详解
说明:以下结果都是在mysql8.2及Innodb环境下测试. varcahr(255)是什么含义? varchar(255) 表示可以存储最大255个字符,至于占多少个字节由字符集决定. varch ...
- 记录--Vue中使用websocket的正确姿势
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1:首先谈谈websocket是什么? WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSocket通信协议于201 ...
- 基于pytorch的图像训练识别
一.准备数据集 分为测试集和训练集,文件如下排放 二.开始识别 数据集准备好后,即可导入到模型开始训练,运行下列代码 import time from torch.utils.tensorboard ...
- 浅谈 KingbaseES 和 SQLServer 中的 instead of 触发器
本文基于Kingbase和SqlServer的INSTEAD OF 触发器主要功能特点进行对比浅析,同时针对SqlServer 的INSTEAD OF 触发器提出了多种kingbase环境的等价代码方 ...
- KingbaseES V8R6 集群运维系列--sys_monitor.sh stop关闭集群分析
案例说明: 对于KingbaseES V8R6集群关闭整个集群通过执行'sys_monitor.sh stop'命令完成,本案例解析了在执行'sys_monitor.sh stop'后,数据库的关闭方 ...
- 开源相机管理库Aravis学习(一)——安装
目录 前言 Aravis简介 依赖关系说明 安装过程 meson安装 aravis源文件下载 构建和安装aravis 视频查看器 安装过程中遇到的问题 meson版本过低 CMake版本过低 缺少GS ...
- 算法学习笔记【4】| 动态规划(Atcoder DP 26题)
动态规划(Atcoder DP 26题) on Atcoder on Luogu 洛谷博客观看体验更佳: Atcoder DP contest 题解 Frog 1 $N$ 个石头,编号为 $1,2,. ...
- Python爬虫初步---jupyterNptebook使用
学习视频笔记: