Select 选择器
用于从一组选项中选择。
基础用法
html
<template>
<dk-select v-model="value" :options="options" />
</template>
<script setup>
import { ref } from 'vue'
const value = ref('')
const options = [
{ label: '选项 A', value: 'A' },
{ label: '选项 B', value: 'B' },
{ label: '禁用项', value: 'X', disabled: true }
]
</script>展开
Options 属性
html
<template>
<dk-select v-model="value" :options="options" :props="props" />
</template>
<script setup>
import { ref } from 'vue'
const value = ref('')
const options = [
{ name: '选项 A', id: 'A' },
{ name: '选项 B', id: 'B' },
{ name: '禁用项', id: 'X', isDisabled: true }
]
const props = { label: 'name', value: 'id', disabled: 'isDisabled' }
</script>展开
有禁用选项
html
<template>
<dk-select v-model="value" :options="options" />
</template>
<script setup>
import { ref } from 'vue'
const value = ref('')
const options = [
{ label: '选项 A', value: 'A' },
{ label: '选项 B', value: 'B' },
{ label: '禁用项', value: 'X', disabled: true }
]
</script>展开
禁用整个组件
html
<template>
<dk-select v-model="value" disabled :options="options" />
</template>展开
可清空
html
<template>
<dk-select v-model="value" clearable :options="options" />
</template>展开
尺寸
html
<template>
<dk-select v-model="value" size="large" :options="options" />
<dk-select v-model="value" size="medium" :options="options" />
<dk-select v-model="value" size="small" :options="options" />
<dk-select v-model="value" size="mini" :options="options" />
</template>展开
基础多选
html
<template>
<dk-select v-model="value" multiple :options="options" />
</template>
<script setup>
import { ref } from 'vue'
const value = ref(['A'])
</script>展开
折叠标签
html
<template>
<dk-select v-model="value" multiple collapse-tags :options="options" />
</template>展开
最多折叠标签数
html
<template>
<dk-select v-model="value" multiple collapse-tags :max-collapse-tags="1" :options="options" />
</template>展开
自定义模板
将内容插入到 dk-option 的默认插槽中即可自定义下拉项。
html
<template>
<dk-select v-model="value">
<dk-option label="北京" value="beijing">
<span>北京</span>
<span>Beijing</span>
</dk-option>
</dk-select>
</template>展开
自定义下拉头部与底部
html
<template>
<dk-select v-model="value" :options="options">
<template #header>...</template>
<template #footer>...</template>
</dk-select>
</template>展开
将选项进行分组
html
<template>
<dk-select v-model="value">
<dk-option-group label="热门城市">
<dk-option label="上海" value="shanghai" />
<dk-option label="北京" value="beijing" />
</dk-option-group>
</dk-select>
</template>展开
使用值键 value-key
当绑定值是对象时,请指定 value-key 作为唯一标识。
html
<template>
<dk-select v-model="value" :options="options" value-key="id" />
</template>展开
自定义加载与空态
html
<template>
<dk-select v-model="value" loading>
<template #loading>...</template>
</dk-select>
<dk-select v-model="value" :options="[]">
<template #empty>...</template>
</dk-select>
</template>展开
远程搜索
html
<template>
<dk-select v-model="value" filterable remote :remote-method="remoteMethod" :loading="loading" :options="options" />
</template>展开
Select 属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| model-value / v-model | 绑定值 | string | number | boolean | object | array | '' |
| options | 选项列表(数组模式) | array | [] |
| props | 选项字段映射(value/label/disabled/options) | object | - |
| disabled | 是否禁用 | boolean | false |
| multiple | 是否多选 | boolean | false |
| clearable | 是否可清空 | boolean | true |
| filterable | 是否可搜索 | boolean | false |
| filter-method | 自定义过滤方法 | (query: string) => boolean | - |
| remote | 是否远程搜索 | boolean | false |
| remote-method | 远程搜索方法 | (query: string) => void | - |
| debounce | 远程搜索防抖(ms) | number | 300 |
| loading | 是否加载中 | boolean | false |
| loading-text | 加载中文案 | string | 'Loading' |
| no-match-text | 无匹配数据文案 | string | '无匹配数据' |
| no-data-text | 无数据文案 | string | '无数据' |
| placeholder | 占位符 | string | '请选择' |
| width | 宽度 | string | '240px' |
| size | 尺寸 | large / medium / small / mini | - |
| value-key | 绑定值为对象时的唯一键 | string | 'value' |
| collapse-tags | 多选时是否折叠标签 | boolean | false |
| max-collapse-tags | 最多显示多少个标签(折叠时) | number | 1 |
| popper-class | 下拉弹层 class | string | '' |
| popper-style | 下拉弹层样式 | string | object | '' |
| teleported | 是否 teleport 到 append-to | boolean | true |
| append-to | teleport 目标 | string | HTMLElement | 'body' |
| offset | 弹层偏移 | number | 8 |
| suffix-icon | 右侧箭头图标 | string | 'IconCaretDown' |
| clear-icon | 清空图标 | string | 'IconClose' |
Select 插槽
| 插槽名 | 说明 |
|---|---|
| default | 自定义下拉项(搭配 DkOption / DkOptionGroup) |
| header | 自定义下拉头部 |
| footer | 自定义下拉底部 |
| loading | 自定义 loading 内容 |
| empty | 自定义空态内容 |
Select 事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| update:modelValue | v-model 更新 | (value) |
| change | 值变化 | (value) |
| clear | 清空 | - |
| visible-change | 下拉显示状态变化 | (visible: boolean) |
| focus | 聚焦 | (evt: FocusEvent) |
| blur | 失焦 | (evt: FocusEvent) |
| remove-tag | 多选移除某个 tag | (tagValue) |
| popup-scroll | 下拉滚动 | (evt: Event) |