news 2026/6/10 18:26:15

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/6/10 11:35:28

3阶段攻克Node.js应用打包:从源码到可执行文件的终极路线图

3阶段攻克Node.js应用打包&#xff1a;从源码到可执行文件的终极路线图 【免费下载链接】pkg vercel/pkg: 是一个用于将 Node.js 项目打包成可执行文件的工具&#xff0c;可以用于部署和分发 Node.js 应用程序&#xff0c;提高应用程序的可移植性和可访问性。 项目地址: http…

作者头像 李华
网站建设 2026/6/9 20:09:26

langgraph图中使用长记忆

一.背景LangGraph 作为 LangChain 生态中专注于大模型流程编排与多轮交互的核心框架&#xff0c;其核心优势是通过有向图结构实现复杂流程的动态流转与状态管理。但在企业级长期运行场景中&#xff0c;单一图流程的 “短期记忆”&#xff08;仅保留当前流程执行周期内的状态&am…

作者头像 李华
网站建设 2026/6/10 11:33:59

挂耳耳机哪个牌子好性价比高?盘点2025十大高性价比开放式耳机

挂耳耳机哪个牌子好性价比高&#xff1f;这是很多务实用户在挑选时最关心的问题。大家都想用合理的预算&#xff0c;买到音质清晰、佩戴舒适、用得住的产品&#xff0c;但市面上不少耳机却让人失望&#xff0c;有的参数好看但声音发糊&#xff0c;有的戴半小时就耳朵胀痛&#…

作者头像 李华
网站建设 2026/6/10 11:36:03

Tidal音乐资源本地化下载工具全面指南

Tidal音乐资源本地化下载工具全面指南 【免费下载链接】Tidal-Media-Downloader Download TIDAL Music On Windows/Linux/MacOs (PYTHON/C#) 项目地址: https://gitcode.com/gh_mirrors/ti/Tidal-Media-Downloader 在数字音乐时代&#xff0c;Tidal以其卓越的音质和丰富…

作者头像 李华
网站建设 2026/6/10 11:31:06

Flink自定义函数开发终极指南:从基础到实战的完整教程

Flink自定义函数开发终极指南&#xff1a;从基础到实战的完整教程 【免费下载链接】flink-learning flink learning blog. http://www.54tianzhisheng.cn/ 含 Flink 入门、概念、原理、实战、性能调优、源码解析等内容。涉及 Flink Connector、Metrics、Library、DataStream AP…

作者头像 李华
网站建设 2026/6/10 11:34:03

mov格式的视频转换mp4格式作技巧

MOV格式作为苹果设备的专属视频格式&#xff0c;在画质表现上相当出色&#xff0c;但在其他设备上的兼容性却十分有限。相比之下&#xff0c;MP4格式凭借其卓越的跨平台兼容性&#xff0c;已成为视频存储与分享的首选格式。接下来&#xff0c;我们将提供mov格式的视频转换mp4格…

作者头像 李华