news 2026/8/20 4:09:47

DevUI中Tabs 页签组件使用详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DevUI中Tabs 页签组件使用详解

📑 DevUI Tabs 页签组件使用详解

Tabs(页签)组件通过将关联的内容分组到不同的标签页中,帮助用户在不离开当前页面的前提下,高效地浏览和切换信息。DevUI 的 Tabs 组件提供了丰富的样式和强大的交互功能。本组件基于 Angular ^18.0.0 版本,用于在单页面内组织并切换不同内容区域,是构建清晰界面结构的核心组件。

1. 核心结构与基本用法

一个基本的 Tabs 由外层的<d-tabs>容器和若干个内嵌的<d-tab>子组件构成。

<d-tabs[type]="'tabs'"[(activeTab)]="activeTabId"(activeTabChange)="onTabChange($event)"><d-tabid="tab1"title="Tab1"><p>这是标签页 1 的内容。</p></d-tab><d-tabid="tab2"title="Tab2"><p>这是标签页 2 的内容。</p></d-tab><d-tabid="tab3"title="Tab3"><p>这是标签页 3 的内容。</p></d-tab></d-tabs>

关键属性说明:

  • <d-tabs>容器:
    • [(activeTab)]:双向绑定,用于设置或获取当前激活标签页的id
    • (activeTabChange):当激活的标签页发生变化时触发的事件。
    • [type]:定义标签页的视觉样式类型,默认为‘tabs‘
  • <d-tab>子项:
    • id:标签页的唯一标识,必须设置且不可重复。
    • title:标签页标题栏显示的文字。

在组件类中定义:

exportclassYourComponent{activeTabId=‘tab1‘;// 默认激活第一个标签页onTabChange(id:string){console.log(‘切换到标签页:‘,id);// 可以在此处执行与标签页切换相关的逻辑,如加载数据}}

2. 丰富的标签页类型

DevUI 提供了多种视觉样式 (type) 以适应不同的设计场景。


类型 (type)特点描述适用场景
tabs默认样式,经典卡片式标签页。通用场景,内容分组。
pills胶囊状标签页,无边框背景。导航感更强的侧边栏或筛选。
options类似单选按钮组样式,常配合固定宽度使用。平级选项选择,如视图切换。
slider带底部滑动指示条的简约样式。需要突出选中状态的导航。
wrapped标签页被包裹在容器内,视觉更紧凑。标签较多或空间受限时。

代码示例 (Pills类型):

<d-tabstype="pills"[(activeTab)]="activeTabId"><d-tab*ngFor="let item of tabList"[id]="item.id"[title]="item.title"></d-tab></d-tabs>

3. 尺寸控制

通过size属性可以控制标签页标题的大小,提供了四种预设尺寸。

<!-- 四种尺寸示例 --><d-tabssize="xs"[(activeTab)]="activeTabId">...</d-tabs><!-- 超小 --><d-tabssize="sm"[(activeTab)]="activeTabId">...</d-tabs><!-- 小 --><d-tabssize="md"[(activeTab)]="activeTabId">...</d-tabs><!-- 中 (默认) --><d-tabssize="lg"[(activeTab)]="activeTabId">...</d-tabs><!-- 大 -->

4. 高级与交互功能

4.1 禁用与拦截切换
  • 禁用单个标签页:在<d-tab>上设置[disabled]=“true”,用户将无法切换到该页。
  • 拦截切换逻辑:通过<d-tabs>[beforeChange]属性传入一个函数,可以在切换发生前进行拦截(例如,表单未保存时提示用户)。
<d-tabs[(activeTab)]="activeTabId"[beforeChange]="beforeTabChange"><d-tabid="tab1"title="Tab1"[disabled]="true">内容1</d-tab><d-tabid="tab2"title="Tab2">内容2</d-tab></d-tabs>
exportclassYourComponent{// 该函数返回 boolean 或 Promise<boolean>beforeTabChange=(id:string):boolean=>{if(/* 某些条件,如表单未保存 */){returnconfirm(‘当前内容未保存,确定要离开吗?‘);}returntrue;// 返回 true 允许切换,false 阻止切换};}
4.2 动态添加与删除标签页

此功能非常适合构建可动态管理的界面(如浏览器标签)。

<d-tabstype="tabs"[addable]="true"[closeable]="true"[(activeTab)]="activeTabId"(addOrDeleteTabChange)="onTabListChange($event)"><d-tab*ngFor="let item of dynamicTabList"[id]="item.id"[title]="item.title"></d-tab></d-tabs>
exportclassYourComponent{dynamicTabList=[...];// 用于渲染标签页的数组activeTabId:string;onTabListChange(event:any){// event.type 可能是 ‘add‘ 或 ‘delete‘// event.id 是相关标签页的 idif(event.type===‘add‘){// 处理添加新标签页的逻辑}elseif(event.type===delete){// 处理删除标签页的逻辑,从 dynamicTabList 中移除对应项}}}
4.3 自定义标题模板

当简单的title属性不能满足需求时(例如需要在标题中加入图标),可以使用dTabTitle指令定义模板。

<d-tabs[(activeTab)]="activeTabId"><d-tab*ngFor="let item of tabItems"[id]="item.id"><!-- 自定义标题模板 --><ng-templatedTabTitle><iclass="icon {{ item.icon }}"></i><span>{{ item.title }}</span><d-badge[count]="item.count"></d-badge></ng-template><!-- 标签页内容 -->{{ item.content }}</d-tab></d-tabs>
4.4 处理大数据量 (scrollMode)

当标签页数量过多,横向空间不足时,可以启用滚动模式。

<d-tabstype="wrapped"[scrollMode]="‘auto‘"<!--true(始终启用)-->[(activeTab)]="activeTabId"><d-tab*ngFor="let item of manyTabs"[id]="item.id"[title]="item.title"></d-tab></d-tabs>

5. 功能特性速查表

下表汇总了 Tabs 组件的核心属性与事件,方便您快速查阅:

分类属性/事件适用对象说明与常用值
核心控制[(activeTab)]d-tabs双向绑定当前激活页的id
(activeTabChange)d-tabs激活页改变时触发。
[type]d-tabs样式类型:tabs,pills,options,slider,wrapped
[size]d-tabs尺寸:xs,sm,md(默认),lg
标签页定义idd-tab必须,唯一标识。
titled-tab标题文本。
[disabled]d-tab是否禁用该页签。
dTabTitle指令ng-template用于自定义标题模板。
交互增强[beforeChange]d-tabs切换前的拦截函数。
[addable]d-tabs是否显示“添加”按钮。
[closeable]d-tabs是否显示“关闭”按钮。
(addOrDeleteTabChange)d-tabs添加/删除页签时触发。
[scrollMode]d-tabs溢出滚动模式:true,false,‘auto‘
其他[showContent]d-tabs是否显示内容区域,设为false可只做导航。
[reactivable]d-tabs是否允许重复点击当前激活页来触发事件。

💡 总结与最佳实践

DevUI Tabs 组件功能完善且灵活。在使用时,建议:

  1. 规划结构:根据内容关联性和操作频率决定是否使用 Tabs。
  2. 选择样式:根据整体设计风格选择合适的typesize
  3. 善用高级功能:对动态内容使用增删功能,对需要校验的场景使用beforeChange拦截。
  4. 保持响应式:在标签页可能过多时,考虑启用scrollMode

参考文档

MateChat:https://gitcode.com/DevCloudFE/MateChat

MateChat官网:https://matechat.gitcode.com

DevUI官网:https://devui.design/home

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 4:22:08

国产RISC-V架构MCU在工控系统中的节能性分析

摘要&#xff1a;随着工业4.0与"双碳"目标的深入推进&#xff0c;工业控制系统的能效优化已成为制约制造业可持续发展的关键技术指标。本文以国科安芯研制的AS32I601系列RISC-V架构MCU芯片为研究对象&#xff0c;系统分析国产RISC-V MCU在工业控制场景下的节能技术路…

作者头像 李华
网站建设 2026/8/20 4:46:29

基于Jousselme距离的改进D-S证据理论MATLAB实现

基于Jousselme距离改进的D-S证据理论MATLAB实现&#xff0c;包含证据距离度量、冲突管理、加权融合等核心功能&#xff0c;适用于不确定性推理和多源信息融合场景。 %% 基于Jousselme距离的改进D-S证据理论 classdef ImprovedDSEvidenceTheorypropertiesframe {}; % …

作者头像 李华
网站建设 2026/8/19 17:39:57

JAVA打造摄影约拍新生态:线上预约,一键开启精彩

JAVA打造摄影约拍新生态&#xff1a;线上预约&#xff0c;一键开启精彩在摄影文化日益繁荣、人们对个性化拍摄需求不断增长的当下&#xff0c;传统摄影约拍模式因信息不透明、沟通效率低等问题&#xff0c;逐渐难以满足市场需求。JAVA凭借其强大的跨平台性、高效性和丰富的生态…

作者头像 李华
网站建设 2026/8/19 17:39:59

RAWGraphs数据可视化终极指南:从零基础到专业图表制作

RAWGraphs数据可视化终极指南&#xff1a;从零基础到专业图表制作 【免费下载链接】rawgraphs-app A web interface to create custom vector-based visualizations on top of RAWGraphs core 项目地址: https://gitcode.com/gh_mirrors/ra/rawgraphs-app 还在为复杂的数…

作者头像 李华
网站建设 2026/8/19 2:37:47

Appium+python+unittest搭建UI自动化框架

阅读本小节&#xff0c;需要读者具备如下前提条件&#xff1a;掌握一种编程语言基础&#xff0c;如java、python等。掌握一种单元测试框架&#xff0c;如java语言的testng框架、python的unittest框架。掌握目前主流的UI测试框架&#xff0c;移动端APP测试框架Appium&#xff0c…

作者头像 李华
网站建设 2026/8/18 16:26:19

Python 测试框架 Pytest 的入门

pytest 简介pytest 是一个功能强大而易于使用的 Python 测试框架。它提供了简单的语法和灵活的功能&#xff0c;用于编写和组织测试代码。1、简单易用&#xff1a;pytest 的语法简洁明了&#xff0c;使得编写测试用例更加直观和易于理解。它使用 assert 语句来验证预期结果&…

作者头像 李华