Skip to content

Select 下拉选择框

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

基础用法(对象数组)

自定义字段名

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

字符串数组

数字数组

占位文本

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

可搜索

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

搜索模式下的键盘操作

按键操作
向下移动高亮
向上移动高亮
Enter选中当前高亮项
Esc关闭下拉面板

远程搜索

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

自定义选项渲染

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

自定义空状态

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

下拉面板高度

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

尺寸

禁用状态

错误状态

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

禁用选项

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

API

Props

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

Events

事件参数说明
update:modelValue(value: string | number)值变化时触发(v-model)
change(value: string | number)值变化时触发
search(value: string)搜索输入时触发(仅在 filterable 模式下可用)

Slots

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

类型支持

Select 组件支持泛型类型推断,可手动标注 options 的类型以获得更好的类型提示:

typescript
import type { SelectOption } from "moongate-vue"

interface User {
  id: number
  name: string
  email: string
}

// 手动标注 options 类型
const options: SelectOption<User>[] = [
  { label: "张三", value: { id: 1, name: "张三", email: "zhang@example.com" } },
  { label: "李四", value: { id: 2, name: "李四", email: "li@example.com" } },
]

注意事项

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

Released under the MIT License