Skip to content

标签页

TuiTabs 是一个极其灵活的选项卡切换组件。 它打破了传统 Tabs 只能水平展示的限制,支持上下左右四个方向的布局,并提供多种外观风格。它既可以作为内容切换器,也可以作为页面内导航条使用。

核心特性

  • 全向布局: 支持 faceTo 属性控制标签朝向(上/下/左/右),轻松实现侧边导航或底部菜单。
  • 三种外观: 提供 simple (简约), card (卡片), button (按钮/分段控制器) 三种风格。
  • 双模式渲染: 支持通过 options 数组纯数据驱动,也支持使用 <TuiTab> 组件进行插槽式开发。
  • 智能滚动: 当标签数量超出容器时,支持开启 scrollable 模式进行滚动浏览。
  • 徽标集成: 内置徽标(Badge)支持,可轻松显示未读数或状态标记。

基础用法

组件插槽模式

使用 <TuiTab> 子组件构建标签。这是最直观的用法,适合需要高度自定义每个标签内容的场景。

html
<script setup>
import { ref } from 'vue';
const activeName = ref(0);
</script>

<template>
  <TuiTabs v-model="activeName">
    <TuiTab :value="0" label="用户管理" icon="tui-icon ti-user" />
    <TuiTab :value="1" label="系统设置" icon="tui-icon ti-settings" />
    <TuiTab :value="2" label="权限配置" disabled />
  </TuiTabs>
</template>

数据驱动模式

通过 options 属性传入配置数组。代码更简洁,适合动态生成的标签列表。

html
<script setup>
import { ref } from 'vue';
const activeId = ref('a');

const tabOptions = [
  { label: '首页', value: 'a', icon: 'ti-home' },
  { label: '消息', value: 'b', count: 12, tagType: 'danger' }, // 带徽标
  { label: '设置', value: 'c' }
];
</script>

<template>
  <TuiTabs v-model="activeId" :options="tabOptions" />
</template>

外观风格

通过 appearance 属性切换视觉风格。

  • simple (默认): 简约风格,通过下划线(或侧边线)指示选中状态。
  • card: 卡片风格,模拟文件夹标签,有边框包裹。
  • button: 按钮风格(分段控制器),常用于表单内的模式切换。
html
<template>
  <TuiTabs appearance="card" v-model="val1" :options="opts" />
  
  <TuiTabs 
    appearance="button" 
    :tagConfig="{ tone: 'strong', round: true }" 
    v-model="val2" 
    :options="opts" 
  />
</template>

朝向与文字排版

TuiTabs 的强大之处在于可以适应各种布局需求。

  • faceTo: 控制 Tab 条相对于内容的位置。
    • up (默认): 标准顶部导航。
    • down: 底部导航。
    • left: 左侧垂直导航。
    • right: 右侧垂直导航。
  • textDirection: 控制文字排列方向。
    • h (默认): 水平排列。
    • v: 垂直排列(常配合 faceTo="left/right" 使用,实现古风或特殊的侧边栏效果)。
html
<template>
  <TuiTabs 
    faceTo="left" 
    textDirection="v" 
    style="height: 400px"
    v-model="active" 
    :options="sideOptions" 
  />
</template>

滚动模式

当标签数量过多超出容器宽度(或高度)时,设置 scrollabletrue 即可开启滚动模式。组件会自动显示左右(或上下)切换箭头。

html
<template>
  <div style="width: 400px">
    <TuiTabs 
      scrollable 
      :scrollOffset="50"
      v-model="active" 
      :options="longOptions" 
    />
  </div>
</template>

徽标与状态

每个 Tab 项都支持显示徽标(Badge)。

  • count: 显示的数值或文本。
  • tagType: 徽标的语义颜色 (primary, danger, warning 等)。
  • tagConfig: 在 TuiTabs 上配置 tagConfig 可统一控制所有徽标的样式(如 round, tone)。
html
<template>
  <TuiTabs 
    :tagConfig="{ tone: 'strong', round: true }" 
    :options="[
       { label: '待办', count: 5, tagType: 'danger' },
       { label: '进行中', count: 12, tagType: 'primary' }
    ]" 
  />
</template>

API 参考

TuiTabs Props

属性名类型默认值说明
modelValueString/Number-双向绑定。当前选中的 Tab 值。
optionsArray[]数据源配置。项对象结构参考下方 TuiTab Props。
appearanceString'simple'外观风格。可选:simple, card, button
faceToString'up'朝向。可选:up, down, left, right
textDirectionStringnull文字方向。可选:h (水平), v (垂直)。如果不填则自动适配。
sizeString'default'尺寸。可选:default, large, small
alignStringnull对齐方式。可选:start, center, end
hideBaseLineBooleanfalse是否隐藏底部的装饰线条(仅 simple/card 模式有效)。
itemMaxWidthNumber/String-单个 Tab 项的最大宽度。
scrollableBooleanfalse是否开启滚动模式。
scrollOffsetNumber0滚动时的额外偏移量。
tagConfigObject-统一透传给内部 TuiTag 组件的 Props(如 tone, round)。
tipConfigObject-统一透传给 Tooltip 的配置。

TuiTab Props (或 Options 对象字段)

属性名类型默认值说明
valueString/NumberRequired唯一标识值
labelString-标签文本(Slot 模式下为默认插槽内容)。
iconStringnull图标类名。
countNumber0徽标数值。大于 0 时显示。
tagTypeString'default'徽标颜色类型 (danger, primary 等)。
disabledBooleanfalse是否禁用该选项。

Events

事件名说明回调参数
change切换选项时触发。`(value: String
update:modelValue双向绑定更新。(value)