news 2026/7/9 15:30:11

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/7/7 6:05:09

DevUI框架中Form表单组件使用详解

&#x1f4cb; 一、组件概述与核心构成 DevUI 的表单组件 (dForm) 是一套用于数据收集、校验和提交的完整解决方案。基于Angular 18.0.0框架&#xff0c;涵盖了从基本结构到高级验证的完整内容。它结构清晰&#xff0c;通常由以下几个核心部分嵌套构成&#xff1a;<form dFo…

作者头像 李华
网站建设 2026/7/5 10:10:54

关于WANCE_SG系列光栅和安全继电器的原理解析

接收端ossd和aux的不同1. OSSD&#xff08;安全输出&#xff09;设计目标&#xff1a;实现最快的安全停机。这是保护人身安全的生命线&#xff0c;其唯一任务就是在检测到危险&#xff08;光束被遮挡&#xff09;时&#xff0c;以最快的速度切断下游的安全电路&#xff0c;从而…

作者头像 李华
网站建设 2026/7/7 8:08:24

JavaScript引擎性能深度对决:Hermes与V8的技术演进与实战选型

JavaScript引擎性能深度对决&#xff1a;Hermes与V8的技术演进与实战选型 【免费下载链接】hermes A JavaScript engine optimized for running React Native. 项目地址: https://gitcode.com/gh_mirrors/hermes/hermes 当移动应用启动时间超过3秒时&#xff0c;53%的用…

作者头像 李华
网站建设 2026/7/8 15:43:39

基于Wan2.2-T2V-A14B搭建广告创意平台,成本直降60%

基于Wan2.2-T2V-A14B搭建广告创意平台&#xff0c;成本直降60% 你有没有经历过这样的场景&#xff1f;市场部凌晨发来紧急需求&#xff1a;“明天就是618&#xff0c;我们要推新款果汁&#xff0c;现在缺一条海边少女奔跑的广告视频&#xff01;” 传统流程得立刻联系导演、找演…

作者头像 李华
网站建设 2026/7/8 16:09:49

5大靠谱论文辅导机构良心推荐,专业导师一对一指导助你高效完成

在当今学术研究日益专业化的背景下&#xff0c;论文写作已成为学生和研究人员面临的重要挑战。选择一家专业的论文辅导机构&#xff0c;获得资深导师的一对一指导&#xff0c;能够显著提升论文质量&#xff0c;节省宝贵时间。本文将为您推荐五家口碑良好、服务专业的论文辅导机…

作者头像 李华