Skip to content

Select 下拉选择框

下拉选择框组件,用于从选项列表中选择一项。支持多种数据格式:对象数组、字符串数组、数字数组。可选配搜索过滤功能。

何时使用:需要用户从预定义选项列表中选择时使用。选项少于 3 个时可考虑 Radio。

基础用法(对象数组)

自定义字段名

如果数据字段不是 label/value,可通过 label-keyvalue-key 指定。

字符串数组

数字数组

占位文本

设置 placeholder 属性,会显示一个不可选中的默认选项。

可搜索

设置 filterable 属性,下拉框支持输入过滤。选项较多时非常实用。

搜索模式下的键盘操作

按键操作
向下移动高亮
向上移动高亮
Home跳到第一条
End跳到最后一条
Enter选中当前高亮项
Esc关闭下拉面板

无障碍:下拉面板通过 Teleport 挂载到 bodyposition: fixed,坐标由组件计算),即使在 overflow: hidden 的容器内也能完整显示;键盘高亮通过 aria-activedescendant 同步到输入框,配合屏幕阅读器阅读当前选项。

远程搜索

结合 @search 事件实现远程搜索:

自定义选项渲染

通过 #option 插槽自定义每个选项的显示内容。

自定义空状态

搜索无结果时,可通过 #empty 插槽自定义提示内容。

下拉面板高度

通过 max-height 属性控制下拉面板的最大高度(单位:px),超出后自动滚动。

多选

设置 multiple 属性启用多选(需与 filterable 配合)。已选项以标签形式展示,可点击移除。选择后下拉保持打开,方便连续多选。

注意:多选模式要求 modelValue 为数组(v-model 绑定 ref([])),且仅支持 filterable 可搜索模式。

多选模式说明

  • 标签展示:已选项以 chip 标签形式显示在输入框内,点击 × 可单独移除
  • 键盘操作Enter 选中后保持下拉打开(方便连续多选),Esc 关闭
  • 连续多选:点击选项后输入框搜索文本自动清空,无需手动删除
  • change 事件:多选时始终返回数组(即使只有一个值)

尺寸

禁用状态

错误状态

error 属性仅控制选择框边框颜色,不渲染错误消息。

禁用选项

在选项中设置 disabled: true 可禁用特定选项。

API

Props

属性类型默认值说明
modelValuestring | number | (string | number)[]'' / []选中的值(v-model),多选时为数组
optionsany[][]选项列表,支持对象数组、字符串数组、数字数组
labelKeystring'label'对象数组中作为显示文本的字段名
valueKeystring'value'对象数组中作为选项值的字段名
placeholderstring''占位文本(显示为不可选中的默认选项)
size'sm' | 'md' | 'lg''md'尺寸
disabledbooleanfalse是否禁用
errorbooleanfalse是否显示错误状态(仅边框样式)
filterablebooleanfalse是否可搜索(启用后替换为自定义下拉框)
multiplebooleanfalse是否多选(需与 filterable 配合,v-model 为数组)
emptyTextstring'暂无数据'搜索无结果时的空状态文案
maxHeightnumber240下拉面板最大高度(单位:px)

Events

事件参数说明
update:modelValue(value: string | number | array)值变化时触发(v-model),多选时为数组
change(value: string | number | array)值变化时触发(多选时始终返回数组)
search(value: string)搜索输入时触发(仅在 filterable 模式下可用)

Slots

名称参数说明
option{ item, label }自定义选项渲染内容
empty自定义搜索无结果时的空状态内容

类型支持

options 支持以下三种数据格式:

格式示例显示值选中值
对象数组[{ label: '技术', value: 'tech' }]label 字段value 字段
字符串数组['红', '绿', '蓝']元素本身元素本身
数字数组[1, 2, 3]元素本身元素本身

对象数组可通过 label-key / value-key 自定义字段名。在 Vue SFC 中 TypeScript 会根据 :options 传入的数据自动推断类型,无需手动标注。

注意事项

  • Select 默认使用原生 <select> 元素,极致轻量,支持键盘导航
  • 设置 filterable 后会替换为自定义下拉框,支持搜索过滤和键盘导航
  • 自定义下拉框支持 键切换选项,Enter 键确认,Esc 键关闭
  • 下拉箭头为内联 SVG,颜色自动继承文字颜色(currentColor
  • placeholder 选项会自动设置为 disabledhidden,不会被选中
  • error 属性仅控制边框颜色,不渲染错误消息
  • 聚焦时显示主题色边框和聚焦环
  • 对象数组默认使用 label/value 字段,可通过 label-key/value-key 自定义
  • 基本类型(字符串、数字)数组自动处理:显示值和选中值均为该值本身
  • 通过 max-height 可控制下拉面板最大高度,超出后自动滚动
  • 多选模式需同时设置 multiple + filterablev-model 绑定数组
  • 多选模式下 Enter 选中后保持下拉打开,方便连续多选;Esc 关闭
  • 多选模式下 change 事件始终返回数组(即使只有一个元素)

Released under the MIT License