下拉选择器组件,支持单选、多选、分组和自定义选项。
<script setup lang="ts">
const value = ref('')
const options = [
{ label: '选项 1', value: '1' },
{ label: '选项 2', value: '2' },
{ label: '选项 3', value: '3' },
]
</script>
<template>
<FmSelect v-model="value" :options placeholder="请选择..." />
</template>| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
multiple | boolean | false | 是否多选 |
disabled | boolean | false | 是否禁用 |
options | (Option | GroupOption)[] | 必需 | 选项数据 |
placeholder | string | - | 占位提示文本 |
class | HTMLAttributes['class'] | - | 自定义 CSS 类 |
interface Option {
label: string
value: AcceptableValue
disabled?: boolean
}interface GroupOption {
label: string
options: Option[]
}无
| 事件名 | 说明 | 回调参数 |
|---|---|---|
change | 选项变化时触发 | value: AcceptableValue | undefined |
无
<script setup lang="ts">
const value = ref('')
const options = [
{ label: '北京', value: 'beijing' },
{ label: '上海', value: 'shanghai' },
{ label: '广州', value: 'guangzhou' },
{ label: '深圳', value: 'shenzhen' },
]
</script>
<template>
<FmSelect v-model="value" :options placeholder="选择城市" />
</template><script setup lang="ts">
const value = ref('')
const options = [
{ label: '选项 1', value: '1' },
{ label: '选项 2', value: '2', disabled: true },
{ label: '选项 3', value: '3' },
]
</script>
<template>
<FmSelect v-model="value" :options placeholder="请选择" />
</template><script setup lang="ts">
const value = ref('')
const options = [
{
label: '热门城市',
options: [
{ label: '北京', value: 'beijing' },
{ label: '上海', value: 'shanghai' },
{ label: '广州', value: 'guangzhou' },
],
},
{
label: '其他城市',
options: [
{ label: '成都', value: 'chengdu' },
{ label: '杭州', value: 'hangzhou' },
{ label: '武汉', value: 'wuhan' },
],
},
]
</script>
<template>
<FmSelect v-model="value" :options placeholder="选择城市" />
</template><script setup lang="ts">
const value = ref('')
const options = [
{ label: '选项 1', value: '1' },
{ label: '选项 2', value: '2' },
{ label: '选项 3', value: '3' },
]
function handleChange(value) {
console.log('选中值变化:', value)
}
</script>
<template>
<FmSelect v-model="value" :options placeholder="请选择" @change="handleChange" />
</template><template>
<FmSelect v-model="value" :options disabled />
</template><script setup lang="ts">
const form = reactive({
city: '',
district: '',
})
const cities = [
{ label: '北京', value: 'beijing' },
{ label: '上海', value: 'shanghai' },
{ label: '广州', value: 'guangzhou' },
]
</script>
<template>
<form>
<div class="flex flex-col gap-4">
<FmSelect v-model="form.city" :options="cities" placeholder="选择城市" />
<FmSelect v-model="form.district" :options="districts" placeholder="选择区域" :disabled="!form.city" />
</div>
</form>
</template>v-model 实现双向数据绑定options 支持普通选项和分组选项两种格式value 可以是字符串、数字等类型options 中包含 options 属性时,会自动识别为分组选项