Skip to content

SegmentedControl 分段选择器

分段器由至少 2 个分段控件组成,用作不同视图的显示切换。

导入

js
import SegmentedControl from '@/components/nav/SegmentedControl.vue';

使用方法

基础用法

vue
<template>
  <SegmentedControl :values="[ '选项1', '选项2', '选项3' ]" v-model:selectedIndex="selectedIndex" />
</template>

<script setup>
import { ref } from 'vue';
import SegmentedControl from '@/components/nav/SegmentedControl.vue';

const selectedIndex = ref(1);
</script>

自定义颜色

通过 tintColor 属性设置不同的主题颜色。

vue
<template>
  <div class="demo-container">
    <SegmentedControl tintColor="success" :values="[ '选项1', '选项2', '选项3' ]" v-model:selectedIndex="selectedIndex2" />
    <SegmentedControl tintColor="warning" :values="[ '选项1', '选项2', '选项3' ]" v-model:selectedIndex="selectedIndex3" />
    <SegmentedControl tintColor="danger" :values="[ '选项1', '选项2', '选项3' ]" v-model:selectedIndex="selectedIndex4" />
  </div>
</template>

<script setup>
import { ref } from 'vue';
import SegmentedControl from '@/components/nav/SegmentedControl.vue';

const selectedIndex2 = ref(1);
const selectedIndex3 = ref(1);
const selectedIndex4 = ref(1);
</script>

朴素样式

通过 plain 属性设置只有外边框的朴素样式。

vue
<template>
  <div class="demo-container">
    <SegmentedControl plain :values="[ '选项1', '选项2', '选项3' ]" v-model:selectedIndex="selectedIndex2" />
    <SegmentedControl plain tintColor="success" :values="[ '选项1', '选项2', '选项3' ]" v-model:selectedIndex="selectedIndex2" />
    <SegmentedControl plain tintColor="warning" :values="[ '选项1', '选项2', '选项3' ]" v-model:selectedIndex="selectedIndex3" />
    <SegmentedControl plain tintColor="danger" :values="[ '选项1', '选项2', '选项3' ]" v-model:selectedIndex="selectedIndex4" />
  </div>
</template>

<script setup>
import { ref } from 'vue';
import SegmentedControl from '@/components/nav/SegmentedControl.vue';

const selectedIndex2 = ref(1);
const selectedIndex3 = ref(1);
const selectedIndex4 = ref(1);
</script>

自定义圆角

通过 radius 属性设置圆角大小。

vue
<template>
  <SegmentedControl :values="[ '选项1', '选项2', '选项3' ]" :radius="30" v-model:selectedIndex="selectedIndex5" />
</template>

<script setup>
import { ref } from 'vue';
import SegmentedControl from '@/components/nav/SegmentedControl.vue';

const selectedIndex5 = ref(1);
</script>

禁用

通过 touchable 属性设置禁用状态,用户不能点击更改。

vue
<template>
  <SegmentedControl :values="[ '选项1', '选项2', '选项3' ]" :touchable="false" v-model:selectedIndex="selectedIndex6" />
</template>

<script setup>
import { ref } from 'vue';
import SegmentedControl from '@/components/nav/SegmentedControl.vue';

const selectedIndex6 = ref(1);
</script>

部分条目禁用

可以通过对象形式的 values 设置单个条目禁用。

vue
<template>
  <SegmentedControl :values="[
    { label: '选项1' },
    { label: '选项2', disabled: true },
    { label: '选项3' },
    { label: '选项4' },
  ]" v-model:selectedIndex="selectedIndex7" />
</template>

<script setup>
import { ref } from 'vue';
import SegmentedControl from '@/components/nav/SegmentedControl.vue';

const selectedIndex7 = ref(1);
</script>

不占满宽度

通过 fill 属性设置控件不占满整个宽度。

vue
<template>
  <div style="display: flex; justify-content: center;">
    <SegmentedControl :values="[ '选项1', '选项2', '选项3' ]" :radius="30" v-model:selectedIndex="selectedIndex5" :fill="false" />
  </div>
</template>

<script setup>
import { ref } from 'vue';
import SegmentedControl from '@/components/nav/SegmentedControl.vue';

const selectedIndex5 = ref(1);
</script>

API 参考

Props

名称说明类型必填默认值
touchable
是否可点击交互
booleantrue
plain是否为简单外框模式booleanfalse
v-model:selectedIndex选中的条目索引number0
fill是否让条目自动填充整个宽度booleantrue
tintColor控制器的主颜色string'primary'
activeTextColor条目激活时的文字颜色string'white'
radius圆角大小number10
values控件段按钮的标签string[] | SegmentedControlCustomItem[]-

SegmentedControlCustomItem

typescript
interface SegmentedControlCustomItem {
  label: string,
  disabled?: boolean,
  [index: string]: unknown;
}

Events

名称说明参数
update:selectedIndex选中项变化事件新选中的索引值number

主题变量

变量名默认值说明
SegmentedControlTintColorprimary控制器的主颜色
SegmentedControlActiveTextColorwhite条目激活时的文字颜色
SegmentedControlBorderWidth1边框宽度
SegmentedControlPressedColorpressed.notice按下时的颜色
SegmentedControlPressedOpacity0.4按下时的透明度
SegmentedControlPlainBackgroundColorbackground.switch朴素模式下的背景色
SegmentedControlBackgroundColorbackground.switch默认背景色
SegmentedControlIndicatorColorbutton指示器颜色
SegmentedControlIndicatorPaddingVertical4指示器垂直内边距
SegmentedControlIndicatorPaddingHorizontal8指示器水平内边距
SegmentedControlItemPaddingVertical8条目垂直内边距
SegmentedControlItemPaddingHorizontal16条目水平内边距
SegmentedControlItemFontSize26条目字体大小