选择器
概述
用于从选项列表中选择值的选择器组件,由按钮触发。触发器渲染选中值(或占位符),弹层支持键盘导航、typeahead 搜索、分组、多选与可清除模式。适用于从有界集合中选取一个或多个值;需在列表中自由输入搜索请用 SCombobox;层级级联数据请用 SCascader。
用法
特性
- 📊 数据驱动
SelectCompactAPI——传items(选项使用label/value字段) - ⌨️ 完整 combobox 交互——指针/键盘打开、Arrow/Home/End 导航、typeahead 搜索、Enter/Space 选择、Escape 关闭
- 🗂 分组,支持组标签、分隔符与条目指示器
- ✅
multiple多选,累积与去重 - 🧹 可清除模式——触发器悬停显现清除按钮;
selectionBehavior控制再次点击是切换还是重置 - 📍 选中项对齐定位(
position="item-aligned") - 📋 通过隐藏代理
<select>(SelectBubbleSelect)支持原生表单提交 - 📌
top/bottom插槽,可在浮窗内添加固定的顶部与底部内容 - ♿ 完整无障碍支持——
role="combobox"/listbox/option、axe 零违规
演示
基础
默认值
禁用
分隔符
分组
顶部与底部插槽
API
Aria 层
20Select<T, M>
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
class | ClassValue | — | select 触发器的类 |
ui | Partial<SelectUi> | — | 该组件的按槽类重写。 |
size | ThemeSize | — | 组件的视觉尺寸。 |
items | SelectOptionData<T>[] | — | 由该组件渲染的项。 |
showArrow | boolean | — | 是否显示箭头。 |
triggerProps | SelectTriggerProps | — | 转发给触发元素的属性。 |
triggerIconProps | SelectTriggerIconProps | — | 转发至触发图标元素的属性。 |
showTriggerIcon | boolean | true | 是否显示触发图标。 |
clearLabel | string | — | 标签清晰。 |
clearProps | SelectClearProps | — | 转发给 `clear` 元素的属性。 |
placeholder | string | — | 占位符。 |
valueProps | SelectValueProps | — | 转发至 value 元素的属性。 |
portalProps | SelectPortalProps | — | 转发给 portal 元素的属性。 |
contentProps | SelectContentProps | — | 转发给内容元素的属性。 |
placement | import("@/index").Placement | — | 位置。 |
popupProps | SelectPopupProps | — | 转发给弹出窗口元素的属性。 |
viewportProps | SelectViewportProps | — | 转发给视口元素的属性。 |
scrollDownButtonProps | SelectScrollDownButtonProps | — | 传递给“向下滚动”按钮元素的属性。 |
scrollUpButtonProps | SelectScrollUpButtonProps | — | 传递给“向上滚动”按钮元素的属性。 |
groupProps | SelectGroupProps | — | 转发给 group 元素的属性。 |
groupLabelProps | SelectGroupLabelProps | — | 转发至组标签元素的属性。 |
itemProps | SelectItemProps | — | 转发给 item 元素的属性。 |
itemTextProps | SelectItemTextProps | — | 这些属性将传递给 item text 元素。 |
itemIndicatorProps | SelectItemIndicatorProps | — | 转发至项指示器元素的属性。 |
separatorProps | SelectSeparatorProps | — | 转发给分隔符元素的属性。 |
arrowProps | PopperArrowProps | — | 转发给箭头元素的属性。 |
open | boolean | — | Select 控件的受控打开状态。可绑定为 `v-model:open`。 |
defaultOpen | boolean | — | 下拉列表在初始渲染时的打开状态。当不需要控制其打开状态时使用。 |
nullableValue | string | — | 当模型值为 nullish 时,隐藏的 native select 选项的值。 |
dir | Direction | — | 下拉列表的阅读方向(如适用)。<br> 若省略,则从全局 `ConfigProvider` 继承,或
默认采用 LTR(从左到右)阅读模式。 |
autocomplete | string | — | 原生 HTML 输入元素的 `autocomplete` 属性。 |
disabled | boolean | — | 当值为 `true` 时,禁止用户与 Select 进行交互 |
modelValue | (M extends true ? T[] : T) | — | 所选项的受控值。
当需要控制项的状态时使用此属性。可通过 `v-model` 进行绑定。 |
defaultValue | (M extends true ? T[] : T) | — | 所选项的默认值。
当需要设置项的初始状态时,请使用此选项。 |
multiple | M | — | 用于确定一次可选择“单个”还是“多个”项目。
此属性将覆盖根据 `modelValue` 和 `defaultValue` 推断出的类型。 |
clearable | boolean | — | 当 `multiple` 为 false 时,是否可以清除所选项目。 |
selectionBehavior | SelectionBehavior | 'toggle' | 集合中多选功能应如何工作。 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | M extends true ? T[] : T | — |
update:open | boolean | 当上下文菜单的打开状态发生变化时,会调用此事件处理程序。 |
closeAutoFocus | Event | 在关闭自动聚焦时触发。 |
escapeKeyDown | KeyboardEvent | 当 Esc 键被按下时触发的事件处理程序。可被阻止。 |
pointerDownOutside | PointerDownOutsideEvent | 当 `pointerdown` 事件发生在 `DismissableLayer` 外部时调用的事件处理程序。可被阻止。 |
select | SelectItemEvent<T> | 当选中某项时触发的事件处理程序。<br> 可以通过调用 `event.preventDefault` 来阻止该事件。 |
插槽
| 插槽名 | 参数 | 描述 |
|---|---|---|
top | — | 自定义内容渲染在弹出窗口顶部,固定在可滚动列表上方。 |
bottom | — | 自定义内容渲染在弹出窗口底部,固定在可滚动列表下方。 |
trigger-leading | — | 触发器首槽的自定义内容。 |
trigger-value | SelectCompactTriggerValueSlotProps<T, M> | 触发值插槽的自定义内容。 |
trigger-trailing | — | 触发器尾部插槽的自定义内容。 |
trigger-icon | — | 触发图标槽位的自定义内容。 |
scroll-up-button | — | “向上滚动”按钮槽位的自定义内容。 |
scroll-down-button | — | 为“向下滚动”按钮槽位定制内容。 |
group-label | SelectCompactGroupLabelSlotProps<T> | 组标签槽位的自定义内容。 |
item-text | SelectCompactItemSlotProps<T> | 针对“项文本”插槽的自定义内容。 |
item-leading | SelectCompactItemSlotProps<T> | 用于项目引导槽位的自定义内容。 |
item-trailing | SelectCompactItemSlotProps<T> | 用于项目尾部槽位的自定义内容。 |
item-indicator | SelectCompactItemSlotProps<T> | 项目指示符插槽的自定义内容。 |
SelectArrow
SelectClear
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
ariaLabel | string | — | “清除”按钮的 ARIA 标签。 |
disabled | boolean | — | “清除”按钮是否处于禁用状态。 |
SelectCompact<T, M>
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
items | SelectOptionData<T>[] | — | 由该组件渲染的项。 |
showArrow | boolean | — | 是否显示箭头。 |
triggerProps | SelectTriggerProps | — | 转发给触发元素的属性。 |
triggerIconProps | SelectTriggerIconProps | — | 转发至触发图标元素的属性。 |
showTriggerIcon | boolean | true | 是否显示触发图标。 |
clearLabel | string | — | 标签清晰。 |
clearProps | SelectClearProps | — | 转发给 `clear` 元素的属性。 |
placeholder | string | — | 占位符。 |
valueProps | SelectValueProps | — | 转发至 value 元素的属性。 |
portalProps | SelectPortalProps | — | 转发给 portal 元素的属性。 |
contentProps | SelectContentProps | — | 转发给内容元素的属性。 |
placement | import("@/index").Placement | — | 位置。 |
popupProps | SelectPopupProps | — | 转发给弹出窗口元素的属性。 |
viewportProps | SelectViewportProps | — | 转发给视口元素的属性。 |
scrollDownButtonProps | SelectScrollDownButtonProps | — | 传递给“向下滚动”按钮元素的属性。 |
scrollUpButtonProps | SelectScrollUpButtonProps | — | 传递给“向上滚动”按钮元素的属性。 |
groupProps | SelectGroupProps | — | 转发给 group 元素的属性。 |
groupLabelProps | SelectGroupLabelProps | — | 转发至组标签元素的属性。 |
itemProps | SelectItemProps | — | 转发给 item 元素的属性。 |
itemTextProps | SelectItemTextProps | — | 这些属性将传递给 item text 元素。 |
itemIndicatorProps | SelectItemIndicatorProps | — | 转发至项指示器元素的属性。 |
separatorProps | SelectSeparatorProps | — | 转发给分隔符元素的属性。 |
arrowProps | PopperArrowProps | — | 转发给箭头元素的属性。 |
open | boolean | — | Select 控件的受控打开状态。可绑定为 `v-model:open`。 |
defaultOpen | boolean | — | 下拉列表在初始渲染时的打开状态。当不需要控制其打开状态时使用。 |
nullableValue | string | — | 当模型值为 nullish 时,隐藏的 native select 选项的值。 |
dir | Direction | — | 下拉列表的阅读方向(如适用)。<br> 若省略,则从全局 `ConfigProvider` 继承,或
默认采用 LTR(从左到右)阅读模式。 |
autocomplete | string | — | 原生 HTML 输入元素的 `autocomplete` 属性。 |
disabled | boolean | — | 当值为 `true` 时,禁止用户与 Select 进行交互 |
modelValue | (M extends true ? T[] : T) | — | 所选项的受控值。
当需要控制项的状态时使用此属性。可通过 `v-model` 进行绑定。 |
defaultValue | (M extends true ? T[] : T) | — | 所选项的默认值。
当需要设置项的初始状态时,请使用此选项。 |
multiple | M | — | 用于确定一次可选择“单个”还是“多个”项目。
此属性将覆盖根据 `modelValue` 和 `defaultValue` 推断出的类型。 |
clearable | boolean | — | 当 `multiple` 为 false 时,是否可以清除所选项目。 |
selectionBehavior | SelectionBehavior | 'toggle' | 集合中多选功能应如何工作。 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | M extends true ? T[] : T | — |
update:open | boolean | 当上下文菜单的打开状态发生变化时,会调用此事件处理程序。 |
closeAutoFocus | Event | 在关闭自动聚焦时触发。 |
escapeKeyDown | KeyboardEvent | 当 Esc 键被按下时触发的事件处理程序。可被阻止。 |
pointerDownOutside | PointerDownOutsideEvent | 当 `pointerdown` 事件发生在 `DismissableLayer` 外部时调用的事件处理程序。可被阻止。 |
select | SelectItemEvent<T> | 当选中某项时触发的事件处理程序。<br> 可以通过调用 `event.preventDefault` 来阻止该事件。 |
插槽
| 插槽名 | 参数 | 描述 |
|---|---|---|
top | — | 自定义内容渲染在弹出窗口顶部,固定在可滚动列表上方。 |
bottom | — | 自定义内容渲染在弹出窗口底部,固定在可滚动列表下方。 |
trigger-leading | — | 触发器首槽的自定义内容。 |
trigger-value | SelectCompactTriggerValueSlotProps<T, M> | 触发值插槽的自定义内容。 |
trigger-trailing | — | 触发器尾部插槽的自定义内容。 |
trigger-icon | — | 触发图标槽位的自定义内容。 |
scroll-up-button | — | “向上滚动”按钮槽位的自定义内容。 |
scroll-down-button | — | 为“向下滚动”按钮槽位定制内容。 |
group-label | SelectCompactGroupLabelSlotProps<T> | 组标签槽位的自定义内容。 |
item-text | SelectCompactItemSlotProps<T> | 针对“项文本”插槽的自定义内容。 |
item-leading | SelectCompactItemSlotProps<T> | 用于项目引导槽位的自定义内容。 |
item-trailing | SelectCompactItemSlotProps<T> | 用于项目尾部槽位的自定义内容。 |
item-indicator | SelectCompactItemSlotProps<T> | 项目指示符插槽的自定义内容。 |
SelectContent
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
position | SelectPosition | — | 应使用的定位模式
`item-aligned(默认)` - 行为类似于原生 macOS 菜单,将内容相对于活动
项目进行定位。<br> `popper` - 以与其他基本控件(例如 `Popover` 或
`DropdownMenu`)相同的方式定位内容。 |
bodyLock | boolean | true | document.body 将被锁定,且滚动功能将被禁用。 |
popupProps | SelectPopupProps | — | 转发给弹出窗口元素的属性。 |
open | boolean | true | 浮动层是否处于打开状态。该状态驱动定位生命周期(当打开状态切换时,`isPositioned`
会重置);定位原语本身没有打开状态,因此
调用方需在此处自行处理打开状态。 |
placement | Placement | undefined | 浮动元素的位置。
若使用该属性,它将覆盖 `side` 和 `align` 属性。 |
side | Side | 'bottom' | 打开时优先渲染的锚点侧。当发生冲突且
启用了 avoidCollisions 时,该侧将反转。 |
sideOffset | number | 0 | 距锚点的像素距离。 |
sideFlip | boolean | true | 遇到边界时,请翻转至另一侧。 |
align | Align | 'center' | 首选与锚点对齐。发生冲突时可能会调整对齐方式。 |
alignOffset | number | 0 | 相对于 `start` 或 `end` 对齐选项的像素偏移量。 |
alignFlip | boolean | true | 当与边界发生冲突时,翻转对齐方式。
此情况仅在 `prioritizePosition` 为 true 时才会发生。 |
avoidCollisions | boolean | true | 当值为 `true` 时,将覆盖“侧边”和“对齐”首选项,以避免与边界边缘发生冲突。 |
collisionBoundary | Element | (Element | null)[] | null | [ ] | 用作碰撞边界的元素。默认情况下,该边界为视口,但您可以提供额外的
元素以纳入此检查范围。 |
collisionPadding | Padding | 0 | 从边界边缘开始,碰撞检测应发生的距离(以像素为单位)。接受一个数字(
所有边均相同),或一个部分填充对象,例如:{ top: 20, left: 20 }。 |
arrowPadding | number | 0 | 箭头与内容边缘之间的间距。如果您的内容使用了 border-radius,这将防止内容
溢出到角落。 |
hideShiftedArrow | boolean | false | 当值为 `true` 时,若无法将箭头居中对齐
到引用元素上,则隐藏该箭头。 |
sticky | 'partial' | 'always' | 'partial' | 在对齐轴上的“粘附”行为。`partial` 会在锚点至少部分位于边界内时将内容保留在边界内,而
“always” 则无论如何都会将内容保留在边界内。 |
hideWhenDetached | boolean | false | 当锚点被完全遮挡时,是否隐藏内容。 |
positionStrategy | 'fixed' | 'absolute' | 'fixed' | 要使用的 CSS `position` 属性的类型。 |
updatePositionStrategy | 'always' | 'optimized' | 'optimized' | 在每个动画帧中更新浮动元素位置的策略。 |
disableUpdateOnLayoutShift | boolean | false | 当布局发生变化时,是否禁用内容的更新位置。 |
prioritizePosition | boolean | false | 强制内容位于视口内。可能会与参考元素重叠,这可能并非预期效果。 |
reference | ReferenceElement | — | 将作为浮动元素定位参考点的自定义元素或虚拟元素。如果
提供了该元素,它将替换默认的锚点元素。 |
disableOutsidePointerEvents | boolean | — | 当值为 `true` 时,`DismissableLayer` 外部元素的悬停/聚焦/点击交互将被禁用。用户
需要双击外部元素才能与其交互:第一次用于关闭 `DismissableLayer`,第二次用于
触发该元素。 |
forceMount | boolean | — | 用于在需要更多控制时强制挂载。
在使用 Vue 动画库控制动画时非常有用。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
closeAutoFocus | Event | 在关闭自动聚焦时触发。 |
escapeKeyDown | KeyboardEvent | 当 Esc 键被按下时触发的事件处理程序。可被阻止。 |
pointerDownOutside | PointerDownOutsideEvent | 当 `pointerdown` 事件发生在 `DismissableLayer` 外部时调用的事件处理程序。可被阻止。 |
SelectGroup
SelectGroupLabel
SelectItem
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
value | DefinedValue | — | 作为数据提交时与 `name` 关联的值。 |
disabled | boolean | — | 当值为 `true` 时,禁止用户与该项进行交互。 |
textValue | string | — | 用于联想输入的可选文本。默认情况下,联想输入功能将使用
`SelectItemText` 部分的 `.textContent`。当内容较为复杂,或其中包含非文本内容时,请使用此选项。 |
asChild | boolean | — | 将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。 |
as | AsTag | Component | 'div' | 该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
select | SelectItemEvent<T> | 当选中某项时触发的事件处理程序。<br> 可以通过调用 `event.preventDefault` 来阻止该事件。 |
SelectItemIndicator
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
asChild | boolean | — | 将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。 |
as | AsTag | Component | 'div' | 该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。 |
SelectItemText
SelectPopup
SelectPortal
SelectRoot<T, M>
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
open | boolean | — | Select 控件的受控打开状态。可绑定为 `v-model:open`。 |
defaultOpen | boolean | — | 下拉列表在初始渲染时的打开状态。当不需要控制其打开状态时使用。 |
nullableValue | string | — | 当模型值为 nullish 时,隐藏的 native select 选项的值。 |
dir | Direction | — | 下拉列表的阅读方向(如适用)。<br> 若省略,则从全局 `ConfigProvider` 继承,或
默认采用 LTR(从左到右)阅读模式。 |
autocomplete | string | — | 原生 HTML 输入元素的 `autocomplete` 属性。 |
disabled | boolean | — | 当值为 `true` 时,禁止用户与 Select 进行交互 |
modelValue | (M extends true ? T[] : T) | — | 所选项的受控值。
当需要控制项的状态时使用此属性。可通过 `v-model` 进行绑定。 |
defaultValue | (M extends true ? T[] : T) | — | 所选项的默认值。
当需要设置项的初始状态时,请使用此选项。 |
multiple | M | — | 用于确定一次可选择“单个”还是“多个”项目。
此属性将覆盖根据 `modelValue` 和 `defaultValue` 推断出的类型。 |
clearable | boolean | — | 当 `multiple` 为 false 时,是否可以清除所选项目。 |
selectionBehavior | SelectionBehavior | 'toggle' | 集合中多选功能应如何工作。 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | M extends true ? T[] : T | — |
update:open | boolean | 当上下文菜单的打开状态发生变化时,会调用此事件处理程序。 |
SelectScrollDownButton
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
type | ButtonType | 'button' | 按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。 |
disabled | boolean | — | 该组件是否已禁用。 |
asChild | boolean | — | 将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。 |
as | AsTag | Component | 'div' | 该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。 |
SelectScrollUpButton
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
type | ButtonType | 'button' | 按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。 |
disabled | boolean | — | 该组件是否已禁用。 |
asChild | boolean | — | 将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。 |
as | AsTag | Component | 'div' | 该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。 |
SelectSeparator
SelectTrigger
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
disabled | boolean | — | 该组件是否已禁用。 |
reference | ReferenceElement | — | — |
asChild | boolean | — | 将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。 |
as | AsTag | Component | 'div' | 该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。 |
SelectTriggerIcon
SelectValue
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
placeholder | string | — | 当未设置 `value` 或 `defaultValue` 时,将在 `SelectValue` 中渲染的内容。 |
SelectViewport
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
nonce | string | — | 将在 style 标签中添加 `nonce` 属性,该属性可供内容安全策略(CSP)使用。<br> 若省略,则从全局
`ConfigProvider` 继承。 |
注意事项
架构与对标差异
VeanUI 基于完整 ComboBox 基座构建选择器:SelectRoot → SelectTrigger(role="combobox")→ SelectValue(collection 标签查找)→ SelectContentImpl(DismissableLayer + FocusScope + typeahead + 键盘导航)→ SelectItem,并由 SelectBubbleSelect 代理原生表单提交。scv() 配方 selectVariants 声明 16 个插槽与 7 个尺寸变体。这与 reka-ui / shadcn 的 select 语义一致,数据驱动 SelectCompact 聚合为 VeanUI 的差异化增强。
| 能力 | VeanUI | reka-ui Select | shadcn Select | Element Plus el-select |
|---|---|---|---|---|
| Aria/styled 分离 | ✅ | ✅ | — | — |
| combobox 角色 + 键盘导航 | ✅ | ✅ | ✅ | ✅ |
| typeahead 搜索 | ✅ | ✅ | — | ✅ |
| 受控/非受控 + 多选 | ✅ | ✅ | — | ✅ |
| 分组 + 组标签 | ✅ | ✅ | ✅ | ✅ |
| 表单代理(BubbleSelect) | ✅ | ✅ | — | ✅ |
| 选中项对齐定位 | ✅ | ✅ | — | — |
| 数据驱动 Compact API | ✅ | — | — | — |
| 虚拟滚动 | — | — | — | ✅ |
| axe 零违规(打开态) | ✅ | — | ✅ | — |
注意事项
- 弹层首次打开前,标签查找依赖由
items计算的数据驱动fallbackLabel——请传入items(而非仅组合子节点),否则defaultValue/ 受控modelValue的触发器文本无法渲染。 - 虚拟滚动未实现;超大选项列表可能需要自行虚拟化。
multiple搭配clearable时,用selectionBehavior决定清除是切换关闭还是重置选择。
常见问题
弹层未打开时如何显示选中标签?
向 SSelect 传入 items。SelectCompact 通过 fallbackLabel 从 items 解析标签,使 defaultValue / 受控 modelValue 立即渲染在触发器上。
如何启用多选?
传入 multiple。选项累积并去重,modelValue 变为数组。
如何分组?
传入分组的 items——分组项携带 label 与嵌套 items 数组。组头通过 group-label 插槽渲染,分隔符通过 separator 渲染。
选择器如何参与原生表单提交?
组件渲染一个镜像当前值的隐藏原生 <select>(SelectBubbleSelect),原生表单提交与浏览器自动填充即可工作。
如何让触发器显示箭头或自定义内容?
使用 trigger-icon / value 插槽(及 showArrow 对应插槽面);SSelect 会转发全部 16 个配方插槽。
如何从触发器清除选中值?
clearable 默认为 true。有选中值时,悬停或聚焦触发器会显现 ✕ 按钮,点击后将 modelValue 重置为 undefined(多选时为 [])。传入 :clearable="false" 可隐藏该按钮。再次点击已选项仍遵循 selectionBehavior。
如何在浮窗内添加固定的顶部或底部内容?
使用 top 与 bottom 插槽。top 渲染在可滚动列表上方,bottom 渲染在其下方;两者保持固定,仅中间的选项列表滚动。