分段
显示多个选项并允许用户选择单个选项。
基本用法
将 v-model 设置为已选择的选项值。
vue
<template>
<div class="flex flex-col items-start gap-4">
<el-segmented v-model="value" :options="options" size="large" />
<el-segmented v-model="value" :options="options" size="default" />
<el-segmented v-model="value" :options="options" size="small" />
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
const value = ref('Mon')
const options = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
</script>
隐藏来源
方向用法 2.8.7
设置 vertical 改变方向。
vue
<template>
<div>
<el-segmented
v-model="size"
:options="sizeOptions"
style="margin-bottom: 1rem"
/>
<br />
<el-segmented
v-model="direction"
:options="directionOptions"
style="margin-bottom: 1rem"
/>
<br />
<el-segmented
v-model="value"
:options="options"
:direction="direction"
:size="size"
>
<template #default="scope">
<div
:class="[
'flex',
'items-center',
'gap-2',
'flex-col',
direction === 'horizontal' && 'p-2',
]"
>
<el-icon size="20">
<component :is="scope.item.icon" />
</el-icon>
<div>{{ scope.item.label }}</div>
</div>
</template>
</el-segmented>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import type { SegmentedProps } from 'element-plus-mobile'
import Apple from '~icons/ep/apple'
import Cherry from '~icons/ep/cherry'
import Grape from '~icons/ep/grape'
import Orange from '~icons/ep/orange'
import Pear from '~icons/ep/pear'
import Watermelon from '~icons/ep/watermelon'
const value = ref('Apple')
const direction = ref<SegmentedProps['direction']>('horizontal')
const size = ref<SegmentedProps['size']>('default')
const directionOptions = [
{ label: 'Horizontal', value: 'horizontal' },
{ label: 'Vertical', value: 'vertical' },
]
const sizeOptions = ['large', 'default', 'small']
const options = [
{
label: 'Apple',
value: 'Apple',
icon: Apple,
},
{
label: 'Cherry',
value: 'Cherry',
icon: Cherry,
},
{
label: 'Grape',
value: 'Grape',
icon: Grape,
},
{
label: 'Orange',
value: 'Orange',
icon: Orange,
},
{
label: 'Pear',
value: 'Pear',
icon: Pear,
},
{
label: 'Watermelon',
value: 'Watermelon',
icon: Watermelon,
disabled: true,
},
]
</script>
隐藏来源
禁用
将分段的 disabled 或选项设置为 true 以禁用它。
vue
<template>
<div class="flex flex-col items-start gap-4">
<el-segmented v-model="value" :options="options" disabled />
<el-segmented v-model="value" :options="options" />
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
const value = ref('Mon')
const options = [
{
label: 'Mon',
value: 'Mon',
disabled: true,
},
{
label: 'Tue',
value: 'Tue',
},
{
label: 'Wed',
value: 'Wed',
disabled: true,
},
{
label: 'Thu',
value: 'Thu',
},
{
label: 'Fri',
value: 'Fri',
disabled: true,
},
{
label: 'Sat',
value: 'Sat',
},
{
label: 'Sun',
value: 'Sun',
},
]
</script>
隐藏来源
自定义选项的别名 2.9.8
当您的options格式与默认格式不同时,您可以通过props属性自定义options的别名
vue
<template>
<div>
<el-segmented v-model="value" :options="options" :props="props" />
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
const value = ref('Mon')
const props = {
label: 'myLabel',
value: 'myValue',
disabled: 'myDisabled',
}
const options = [
{
myLabel: 'Mon',
myValue: 'Mon',
myDisabled: true,
},
{
myLabel: 'Tue',
myValue: 'Tue',
},
{
myLabel: 'Wed',
myValue: 'Wed',
myDisabled: true,
},
{
myLabel: 'Thu',
myValue: 'Thu',
},
{
myLabel: 'Fri',
myValue: 'Fri',
myDisabled: true,
},
{
myLabel: 'Sat',
myValue: 'Sat',
},
{
myLabel: 'Sun',
myValue: 'Sun',
},
]
</script>
隐藏来源
块
将 block 设置为 true 以适合父元素的宽度。
vue
<template>
<div>
<el-segmented v-model="value" :options="options" block />
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
const value = ref('Mon')
const options = [
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat',
'Sunday long long long long long long long',
]
</script>
隐藏来源
自定义内容
设置默认插槽以呈现自定义内容。
vue
<template>
<div>
<el-segmented v-model="value" :options="options">
<template #default="scope">
<div class="flex flex-col items-center gap-2 p-2">
<el-icon size="20">
<component :is="scope.item.icon" />
</el-icon>
<div>{{ scope.item.label }}</div>
</div>
</template>
</el-segmented>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import Apple from '~icons/ep/apple'
import Cherry from '~icons/ep/cherry'
import Grape from '~icons/ep/grape'
import Orange from '~icons/ep/orange'
import Pear from '~icons/ep/pear'
import Watermelon from '~icons/ep/watermelon'
const value = ref('Apple')
const options = [
{
label: 'Apple',
value: 'Apple',
icon: Apple,
},
{
label: 'Cherry',
value: 'Cherry',
icon: Cherry,
},
{
label: 'Grape',
value: 'Grape',
icon: Grape,
},
{
label: 'Orange',
value: 'Orange',
icon: Orange,
},
{
label: 'Pear',
value: 'Pear',
icon: Pear,
},
{
label: 'Watermelon',
value: 'Watermelon',
icon: Watermelon,
},
]
</script>
隐藏来源
自定义样式
使用 CSS 变量设置自定义样式。
vue
<template>
<div class="custom-style">
<el-segmented v-model="value" :options="options" />
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
const value = ref('Delicacy')
const options = ['Delicacy', 'Desserts&Drinks', 'Fresh foods', 'Supermarket']
</script>
<style scoped>
.custom-style .el-segmented {
--el-segmented-item-selected-color: var(--el-text-color-primary);
--el-segmented-item-selected-bg-color: #ffd100;
--el-border-radius-base: 16px;
}
</style>
隐藏来源
API
属性
| 名称 | 描述 | 类型 | 默认 |
|---|---|---|---|
| 模型值 / v 模型 | 绑定值 | 字符串 / 数字 / 布尔值 | — |
| 选项 | 选项数据 | 数组 | [] |
| 道具 2.9.8 | 配置选项见下表 | 对象 | — |
| 尺寸 | 组件尺寸 | 枚举 | '' |
| 块 | 适合父内容的宽度 | 布尔值 | 假 |
| 已禁用 | 是否禁用分段 | 布尔值 | 假 |
| 验证事件 | 是否触发表单验证 | 布尔值 | 真实 |
| 名称 | 原生 name 属性 | 字符串 | — |
| 编号 | 原生 id 属性 | 字符串 | — |
| 咏叹调标签 a11y | 原生 aria-label 属性 | 字符串 | — |
| 方向 2.8.7 | 显示方向 | 枚举 | 水平 |
道具
| 属性 | 描述 | 类型 | 默认 |
|---|---|---|---|
| 价值 | 指定节点对象的哪个键用作节点的值 | 字符串 | 价值 |
| 标签 | 指定节点对象的哪个键用作节点的标签 | 字符串 | 标签 |
| 已禁用 | 指定节点对象的哪个键用作节点的禁用 | 字符串 | 已禁用 |
活动
| 名称 | 描述 | 类型 |
|---|---|---|
| 改变 | 当选定值改变时触发,参数为当前选定值 | 功能 |
老虎机
|名称 |描述 |类型 | | -------- | ---------------- | ------------------------ | | |默认 |选项渲染器 | 对象 |
类型声明
显示声明
ts
type Option = Record<string, any> | string | number | boolean