Skip to content

SegmentedControl 分段控制器

分段控制器组件,用于在多个互斥选项中快速切换。支持图标、尺寸、垂直排列等。

基础用法

通过 v-model 绑定当前选中值,options 定义选项列表。

查看代码
vue
<script setup lang="ts">
import { ref } from 'vue'
import { TSegmentedControl } from '@gulcc/tabler-vue'

const seg = ref('list')
const options = [
  { value: 'list', label: '列表' },
  { value: 'grid', label: '网格' },
  { value: 'card', label: '卡片' },
]
</script>

<template>
  <TSegmentedControl v-model="seg" :options="options" />
</template>

带图标

通过选项的 icon 属性传入图标组件(来自 @tabler/icons-vue)。

vue
<TSegmentedControl
  v-model="seg"
  :options="[
    { value: 'day', label: '日视图', icon: IconPhoto },
    { value: 'week', label: '周视图', icon: IconVideo },
    { value: 'month', label: '月视图', icon: IconMusic },
  ]"
/>

填充宽度

设置 fill 使选项平均填充容器宽度。

vue
<TSegmentedControl v-model="seg" fill :options="options" />

垂直方向

设置 vertical 切换为垂直排列,适合侧边栏场景。

vue
<TSegmentedControl v-model="seg" vertical :options="options" />

尺寸变体

通过 size 属性控制尺寸:sm(小)、md(默认)、lg(大)。

vue
<TSegmentedControl v-model="seg" size="sm" :options="options" />
<TSegmentedControl v-model="seg" size="lg" :options="options" />

禁用状态

设置 disabled 禁用所有交互,或通过选项的 disabled 属性禁用单项。

查看代码
vue
<!-- 全部禁用 -->
<TSegmentedControl v-model="seg" disabled :options="options" />

<!-- 单项禁用 -->
<TSegmentedControl
  v-model="seg"
  :options="[
    { value: 'a', label: 'A' },
    { value: 'b', label: 'B', disabled: true },
    { value: 'c', label: 'C' },
  ]"
/>

API

Props

参数类型默认值说明
v-model / modelValuestring''当前选中的值
optionsSegmentedOption[][]选项列表
namestring'segmented'表单 name 属性
size'sm' | 'md' | 'lg''md'尺寸
verticalbooleanfalse垂直方向
fillbooleanfalse填充容器宽度
disabledbooleanfalse全局禁用

SegmentedOption

参数类型默认值说明
valuestring选项值
labelstring显示文本
iconComponent图标组件(来自 @tabler/icons-vue)
disabledbooleanfalse单个选项禁用

Emits

事件名参数说明
update:modelValue(value: string)v-model 更新事件
change(value: string)选中值变化时触发