Skip to content

FxSelect 选择器 / FxOption / FxOptionGroup

不依赖任何 UI 框架。基于 FxTooltip + FxScrollbar + FxIcon。

基础用法

options 数据驱动

通过 options 属性直接传数据,无需手写 FxOptionoption-props 可自定义字段别名。

多选(multiple)

折叠标签(collapse-tags)

collapse-tags 折叠多余标签,max-collapse-tags 控制最多显示数;开启 collapse-tags-tooltip 后,悬浮 +N 会用 tooltip 显示被折叠的项,tag-tooltip 可配置该 tooltip,字段透传给 FxTooltip(完整字段见下方 API 表,含 effect / placement / offset / showArrow / transition / appendTo 等)。

搜索(filterable)

为 FxSelect 启用搜索过滤。默认会匹配所有 label 包含输入值的选项;如需自定义过滤策略,可传 filter-method(输入值变化时调用,参数为当前输入值)。

可清空(clearable)

分组(FxOptionGroup)

下拉头部(header slot)

v-for 渲染选项(options)

自定义选项内容(custom label)

对象值(value-key)

如果 FxSelect 的绑定值是对象,务必设置 value-key 为其唯一标识键名。通过 value-key 可正确处理 label 重复的数据——label 重复但通过 id 区分选项。

自定义标签(custom tag)

多选模式下可通过 tag 作用域插槽自定义标签内容(作用域参数:itemindexclose)。使用自定义 tag 时 collapse-tagscollapse-tags-tooltipmax-collapse-tags 不生效。

加载中(loading)

loading 显示加载状态,loading-text 自定义加载文本。

输入关键词从服务端搜索数据。设置 filterableremotetrue 开启远程搜索,并传入 remote-method(输入值变化时调用的函数,参数为当前输入值)。内置 debounce 防抖(默认 300ms)。注意:用 v-for 渲染 FxOption 时需加 key(唯一值,如 item.value)。

创建新选项(allow-create)

通过 allow-create 属性,用户可在输入框中输入新值来创建不在选项列表中的项。注意:allow-create 需配合 filterable 使用。

空值处理(empty-values)

empty-values 定义哪些值视为"未选择"(显示 placeholder)。

禁用(disabled)

禁用选项(disabled option)

尺寸(size)

键盘交互

行为
/ 在可见 option 间导航(跳过禁用项,循环);下拉关闭时按 展开
Enter选中当前高亮 option(IME 组合态时不触发)
Esc有搜索词时清空搜索词;否则关闭下拉
Backspace多选且输入框为空时删除最后一个非禁用 tag
Tab关闭下拉并切焦到下一可聚焦元素
Home / End跳到首个 / 末个可见 option
PageUp / PageDown向上 / 向下跳 10 项

filterable 单选模式下,组件根元素带 tabindex="-1",可通过 Tab 聚焦后使用键盘。

FxSelect Props(常用)

属性类型默认值说明
model-value (v-model)OptionValue | OptionValue[]绑定值
multiplebooleanfalse是否多选
disabledbooleanfalse是否禁用
clearablebooleanfalse是否可清空
filterablebooleanfalse是否可搜索
placeholderstring'请选择'占位文字
size'large' | 'default' | 'small''default'尺寸
collapse-tagsbooleanfalse多选折叠 tag
max-collapse-tagsnumber1折叠时最多显示 tag 数
value-keystring'value'对象值主键
no-data-textstring'暂无数据'无数据文本
no-match-textstring无匹配文本
multiple-limitnumber0多选最多可选数
filter-method(query: string) => void自定义过滤
value-keystring'value'对象值主键
fit-input-widthbooleanfalse菜单匹配输入框宽
show-arrowbooleantrue显示箭头
offsetnumber12浮层偏移
tabindexstring | number0tabindex
aria-labelstringaria-label
allow-createbooleanfalse允许创建(需 filterable)
remotebooleanfalse远程加载
loadingbooleanfalse加载中
loading-textstring加载中文本
optionsRecord<string, any>[]数据驱动
option-props{ label?, value?, disabled? }{label,value,disabled}options 字段别名
empty-valuesany[][undefined, null, '']空值列表
value-on-clearany清空时回填的值,不传时维持默认(多选 []、单选 undefined
idstringinput id
automatic-dropdownbooleanfalsefocus 时自动展开下拉
popper-optionsRecord<string, unknown>透传给底层 floating-ui 的定位配置
remote-show-suffixbooleanfalse远程搜索时是否仍显示后缀(箭头)
collapse-tags-tooltipbooleanfalse折叠 tag 时悬浮显示被折叠项
tag-tooltip{ effect?, placement?, offset?, showArrow?, fallbackPlacements?, appendTo?, popperClass?, popperStyle?, transition?, teleported?, popperOptions?, showAfter?, hideAfter?, autoClose? }折叠 tag tooltip 的配置,字段透传给 FxTooltip
validate-eventbooleantrue值变化时是否触发表单项校验

FxSelect Events

事件名说明
update:modelValue值变化
change变化时
clear清空时
visible-change显隐变化
remove-tag多选移除 tag
focus / blur聚焦 / 失焦
popup-scroll下拉菜单滚动时持续触发(参数:{ scrollTop, scrollLeft }
end-reached下拉滚动到边界时触发(参数:top / bottom / left / right

FxSelect Slots

插槽名说明
default选项内容(FxOption / FxOptionGroup)
prefix前置内容
tag自定义多选标签(作用域:item/index/close
label自定义选中项标签(单选作用域:label/value;多选 tag 内含 index/label/value
header下拉菜单头部内容
footer下拉菜单底部内容
empty无数据 / 无匹配数据时的内容
loading加载中内容

FxOption Props

属性类型说明
valueOptionValue选项值
labelstring | number选项标签
disabledboolean是否禁用
createdboolean是否由用户创建(配合 allow-create)

FxOptionGroup Props

属性类型说明
labelstring分组标题
disabledboolean是否禁用整组