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

介绍

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

效果图预览

img

使用说明

  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组件使用说明

最后分享一份鸿蒙(HarmonyOS)开发学习指南需要的可以扫码免费领取!!!

《鸿蒙(HarmonyOS)开发学习指南》

第一章 快速入门

1、开发准备

2、构建第一个ArkTS应用(Stage模型)

3、构建第一个ArkTS应用(FA模型)

4、构建第一个JS应用(FA模型)

5、…

图片

第二章 开发基础知识

1、应用程序包基础知识

2、应用配置文件(Stage模型)

3、应用配置文件概述(FA模型)

4、…

图片

第三章 资源分类与访问

1、 资源分类与访问

2、 创建资源目录和资源文件

3、 资源访问

4、…

图片

第四章 学习ArkTs语言

1、初识ArkTS语言

2、基本语法

3、状态管理

4、其他状态管理

5、渲染控制

6、…

图片

第五章 UI开发

1.方舟开发框架(ArkUI)概述

2.基于ArkTS声明式开发范式

3.兼容JS的类Web开发范式

4…

图片

第六章 Web开发

1.Web组件概述

2.使用Web组件加载页面

3.设置基本属性和事件

4.在应用中使用前端页面JavaScript

5.ArkTS语言基础类库概述

6.并发

7…

图片

11.网络与连接

12.电话服务

13.数据管理

14.文件管理

15.后台任务管理

16.设备管理

17…

图片

第七章 应用模型

1.应用模型概述

2.Stage模型开发指导

3.FA模型开发指导

4…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/525170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实践笔记-03 docker buildx 使用

docker buildx 使用 1.启用docker buildx2.启用 binfmt_misc3.从默认的构建器切换到多平台构建器3.1创建buildkitd.toml文件&#xff08;私有仓库是http没有证书的情况下&#xff0c;需要配置&#xff09;3.2创建构建器并使用新创建的构建器 4.构建多架构镜像并推送至harbor仓库…

5分钟学会Rust语言如何操作JSON

JSON(JavaScript Object Notation)在Web开发中被广泛应用于数据交换。作为一种数据格式&#xff0c;JSON相较于XML来说&#xff0c;更易于阅读和写入&#xff0c;且数据解析性能强。Rust作为一门系统级编程语言&#xff0c;其与JSON的交互操作密切。本文将详细地描述在Rust中如…

vscode 安装vim插件配置ctrl + c/v功能

搜索Vim插件 插件介绍部分有提示操作 首先安装该插件&#xff0c;然后按照下述步骤设置ctrl相关的快捷键&#xff0c;以便于脱离im快捷键而愉快的敲代码。 1.在“设置”搜索框内搜索vim.handleKeys&#xff0c;选择 Edit in settings.json 2. 设置ctrl-c,ctrl-v等快捷键置为fa…

VSCODE目录树缩进调整

VSCode默认的缩进太小了&#xff0c;简直看不出来&#xff0c;很容易弄混目录。在设置里修改就行了。 修改后效果&#xff1a;

面试算法-151-矩阵置零

题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 解 class Solutio…

医疗设备安全简史

作者&#xff1a;AJ Burns、M. Eric Johnson和Peter Honeyman 随着软件驱动设备的植入&#xff0c;给人体带来了独特的隐私和安全威胁。 介绍&#xff1a; 现代医疗设备的功能继续从根本上改变急性病症的治疗以及慢性长期疾病的管理。随着这些技术的发展&#xff0c;这些设备…

python语言程序设计完结

概述&#xff1a; 程序设计是计算机可编程的体现 程序设计&#xff0c;亦称编程&#xff0c;是深度应用计算机的主要手段 程序设计已经成为当今社会需求量最大的职业技能之一 程序设计语言是一种用于交互&#xff08;交流&#xff09;的人造语言 程序设计语言&#xff0c;亦称…

顺序表——功能实现

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 目录 1.0 前言 2.0 线性表 2.1 顺序表 2.2 顺序表的分类 2.3 顺序表功能的实现…

利用Leaflet + React:构建WEBGIS

React是 Facebook 开发的一个开源库&#xff0c;用于构建用户界面。就其本身而言&#xff0c;Leaflet是一个用于将地图发布到网络的JavaScript 库。这两个工具的组合很简单&#xff0c;允许您创建动态网络地图。在本文中&#xff0c;我们将看到这种组合的一些特征以及一些简单的…

Go 项目依赖注入wire工具最佳实践介绍与使用

文章目录 一、引入二、控制反转与依赖注入三、为什么需要依赖注入工具3.1 示例3.2 依赖注入写法与非依赖注入写法 四、wire 工具介绍与安装4.1 wire 基本介绍4.2 安装 五、Wire 的基本使用5.1 前置代码准备5.2 使用 Wire 工具生成代码 六、Wire 核心技术5.1 抽象语法树分析5.2 …

并发编程之Java中Selector

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Selector提供选择执…

ChatGPT基础(一) GPT的前世今生

文章目录 GPT模型简史GPT系列模型ChatGPT的应用 最近ChatGPT3.5可以免注册使用了&#xff0c;出来刨一波坟 说一说ChatGPT的来源和应用。 GPT模型简史 Generative pre-trained transformers(GPT)生成式预训练转换模型是大语言模型的一种(Large Language Model–>LLM)。它是…

C语言高效的网络爬虫:实现对新闻网站的全面爬取

1. 背景 搜狐是一个拥有丰富新闻内容的网站&#xff0c;我们希望能够通过网络爬虫系统&#xff0c;将其各类新闻内容进行全面地获取和分析。为了实现这一目标&#xff0c;我们将采用C语言编写网络爬虫程序&#xff0c;通过该程序实现对 news.sohu.com 的自动化访问和数据提取。…

深入理解GO语言——GC垃圾回收二

文章目录 前言一、Go V1.5的三色并发标记法总结 前言 书接上回&#xff0c;无论怎么优化&#xff0c;Go V1.3都面临这个一个重要问题&#xff0c;就是mark-and-sweep 算法会暂停整个程序 。 Go是如何面对并这个问题的呢&#xff1f;接下来G V1.5版本 就用 三色并发标记法 来优…

深入MyBatis的动态SQL:概念、特性与实例解析

MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。它可以使用简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff0c;即普通的 Java 对象为数据库中的记…

混合云构建-如何通过Site to Site VPN 连接 AWS 和GCP云并建立一个高可用的VPN通信

如果我们的业务环境既有AWS云又有GCP云,那么就需要将他们打通,最经济便捷的方式就是通过Site-to-Site VPN连接AWS和GCP云,你需要在两个云平台上分别配置VPN网关,并建立一个VPN隧道来安全地连接这两个环境,稍微有些复杂繁琐,以下是详细步骤的动手实践: 一、在GCP 云中创…

通过自动化部署消除人为操作:不断提高提交部署比率

三十年后&#xff0c;我仍然热爱成为一名软件工程师。事实上&#xff0c;我最近读了威尔拉森&#xff08;Will Larson&#xff09;的《员工工程师&#xff1a;超越管理轨道的领导力》&#xff0c;这进一步点燃了我以编程方式解决复杂问题的热情。知道雇主继续照顾员工、原则和杰…

pyside6,“提升为”的部件使用困惑

在Qt designer中&#xff0c;新建一个QMainWindow&#xff0c;新建一个QWidget&#xff0c;并命名为widget&#xff0c;如图&#xff1a; 新建NewClass.py&#xff0c;输入代码&#xff1a; # encoding: utf-8 from PySide6.QtWidgets import QWidgetclass NewClass(QWidget):…

关于Mac使用idea问题

多窗口切换问题 如果出现Mac打开idea新的项目&#xff0c;发现始终就一个窗口&#xff0c;不能像window那样多窗口&#xff0c;比如 只能这样来回点着切换&#xff0c;提供以下方案 1.方案一 则在idea里多个项目会呈tab页切换&#xff0c;也是始终一个窗口&#xff0c;只是多了…

SpringCloud Alibaba Sentinel 简介和安装

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十三篇&#xff0c;即介绍 SpringCloud Alibaba Sentinel 简介和安装。 二、Sentinel 简介 2.1 Sent…