组件/SearchSelect 搜索选择器

SearchSelect 搜索选择器

输入即搜索、点选即回填的选择器

已验证自 0.3.4

用法

基础

本地模式按 label 过滤 options,输入为空时显示全部。

示例加载中...

远程搜索

remote 关闭本地过滤,输入防抖结束或按 Enter 时派发 search;在回调中写回 options。

示例加载中...

筛选工具栏

TxSearchSelect 承载范围、类型、状态等结构化筛选;关键词交给 TxSearchInput,无结果时显示 TxSearchEmpty。

示例加载中...

最佳实践

  • 本地模式只放小型 options;大型数据源用 remote,由外部写回结果。
  • label 保持稳定、可读,本地过滤只匹配它。
  • 只从受控选项中取值;自由关键词搜索用 TxSearchInput。
  • 禁用项只作说明性条目,不要让它成为唯一结果。

API 参考

属性

属性名类型默认值说明
modelValuestring | number''选中值,配合 v-model 使用。
placeholderstring'Search'输入框的占位文本。
disabledbooleanfalse禁用输入、面板与聚焦展开,不派发远程 search。
clearablebooleantrue显示清空按钮,可清空选中值。
optionsTxSearchSelectOption[][]候选项;禁用项不可选。
loadingbooleanfalse在输入框后缀显示加载指示器。
remotebooleanfalse关闭本地过滤,改为派发 search。
searchDebouncenumber200远程 search 的防抖时长(ms)。
dropdownMaxHeightnumber280面板最大高度(px),超出后内部滚动。
dropdownOffsetnumber6面板与输入框的间距。
panelVariant'solid' | 'dashed' | 'plain''solid'面板边框形态,同 TxCard variant。
panelBackground'pure' | 'mask' | 'blur' | 'glass' | 'refraction''refraction'面板背景,同 TxCard background。
panelShadow'none' | 'soft' | 'medium''soft'面板阴影,同 TxCard shadow。
panelRadiusnumber18面板圆角,同 TxCard radius。
panelPaddingnumber6面板内边距,同 TxCard padding。

事件

事件名参数说明
update:modelValue(v: string | number)选中启用项或清空后触发。
change(v: string | number)与 update:modelValue 同时触发。
search(q: string)远程模式下输入防抖结束或按 Enter 时触发。
select(opt: TxSearchSelectOption)选中启用项后、面板关闭前触发。
open-面板打开时触发。
close-面板关闭时触发,并取消待发的远程 search。

暴露方法

名称类型说明
open()() => void未禁用时打开面板。
close()() => void关闭面板。
focus()() => void聚焦内部 TxInput。
blur()() => void使内部 TxInput 失焦。
clear()() => void清空输入与选中值。

类型

EXAMPLE.TS
export interface TxSearchSelectOption {
  value: string | number
  label: string
  disabled?: boolean
}

概述

  • 远程模式原样显示 options,不缓存结果。
  • 清空时以 '' 派发 update:modelValue 与 change。
  • 面板关闭后保留输入内容,重新打开不会重置。
  • 键盘:ArrowDown / ArrowUp 打开面板并在启用项间循环高亮;Enter 选中高亮项,无高亮时派发远程 search;Escape 关闭面板。

技术实现

  • 面板由 TxPopover 承载;不开放插槽,前缀、加载后缀、空态与选项行均由内部渲染,以保持键盘与弹层行为一致。
  • 源码:packages/tuffex/packages/components/src/search-select/。
查看源码
packages/tuffex/packages/components/src/search-select/index.ts