FxAutocomplete 自动补全输入框
根据当前输入获取推荐建议。不依赖任何 UI 框架,继承 FxInput 全部能力,内部组合 FxTooltip + FxScrollbar + FxIcon。
基础用法
fetch-suggestions 是返回建议的方法。本例中 querySearch(queryString, cb) 在建议就绪时通过 cb(data) 回传;第二个示例关闭 trigger-on-focus,仅输入时才出建议。
自定义模板
用作用域插槽自定义建议项,作用域内通过 item 访问建议对象。
远程搜索
从服务端异步搜索数据。
自定义 loading
通过 loading 插槽覆盖加载内容。
自定义 header / footer
通过 header / footer 插槽自定义下拉的头部和底部。
API
Attributes
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| model-value (v-model) | 绑定值 | string / number | '' |
| value-key | 建议对象用于显示的键名 | string | 'value' |
| debounce | 输入防抖延时(ms) | number | 300 |
| placement | 下拉位置 | 'top' / 'top-start' / 'top-end' / 'bottom' / 'bottom-start' / 'bottom-end' | 'bottom-start' |
| fetch-suggestions | 获取建议的方法:建议就绪后调 cb(data) 回传,亦可返回数组 / Promise | ((queryString: string, cb) => void) / array | — |
| trigger-on-focus | 聚焦时是否展示建议 | boolean | true |
| select-when-unmatched | 无匹配项时回车是否仍触发 select | boolean | false |
| hide-loading | 是否隐藏远程加载图标 | boolean | false |
| highlight-first-item | 是否默认高亮首项 | boolean | false |
| fit-input-width | 下拉宽度是否与输入框一致(默认仅最小宽度对齐) | boolean | false |
| loop-navigation | 键盘导航是否首尾循环 | boolean | true |
| popper-class | 下拉自定义类名 | string / array / object | — |
| popper-style | 下拉自定义样式 | string / CSSProperties | — |
| popper-options | floating-ui 参数 | object | {} |
| show-arrow | 是否显示箭头 | boolean | true |
| teleported | 下拉是否 teleport 到 body | boolean | true |
| append-to | 下拉挂载位置 | string / HTMLElement | — |
| placeholder | 占位文本 | string | — |
| clearable | 是否显示清除按钮 | boolean | false |
| disabled | 是否禁用 | boolean | false |
| size | 尺寸 | 'large' / 'default' / 'small' | — |
| prefix-icon | 前置图标(字符串为 FxIcon 图标名) | string / Component | — |
| suffix-icon | 后置图标(字符串为 FxIcon 图标名) | string / Component | — |
| name | 原生 name | string | — |
| aria-label | 原生 aria-label | string | — |
另继承
FxInput其余 props(readonly/maxlength/formatter/parser等,详见 FxInput)。
Events
| 事件名 | 说明 | 类型 |
|---|---|---|
| update:modelValue | 绑定值更新 | (value: string | number) => void |
| input | 输入时 | (value: string | number) => void |
| change | 值变化(失焦 / 回车等) | (value: string | number) => void |
| focus | 聚焦 | (event: FocusEvent) => void |
| blur | 失焦 | (event: FocusEvent) => void |
| clear | 点击清除按钮 | () => void |
| select | 选中某条建议 | (item: Record<string, any>) => void |
Slots
| 插槽名 | 说明 | 类型 |
|---|---|---|
| default | 自定义建议项内容 | { item: Record<string, any> } |
| header | 下拉顶部内容 | — |
| footer | 下拉底部内容 | — |
| loading | 自定义加载内容 | — |
| prefix | 输入框前置内容(透传 FxInput) | — |
| suffix | 输入框后置内容(透传 FxInput) | — |
| prepend | 输入框前置区块(透传 FxInput) | — |
| append | 输入框后置区块(透传 FxInput) | — |
Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| highlightedIndex | 当前高亮项索引 | Ref<number> |
| activated | 是否已激活 | Ref<boolean> |
| loading | 远程加载态 | Ref<boolean> |
| inputRef | FxInput 实例 | Ref<FxInputInstance> |
| popperRef | FxTooltip 实例 | Ref<FxTooltipInstance> |
| suggestions | 当前建议列表 | Ref<Record<string, any>[]> |
| focus | 聚焦输入框 | () => void |
| blur | 失焦输入框 | () => void |
| close | 关闭下拉 | () => void |
| highlight | 高亮指定索引项 | (index: number) => void |
| handleSelect | 选中某条建议 | (item: any) => Promise<void> |
| handleKeyEnter | 处理回车 | () => Promise<void> |
| getData | 拉取建议列表 | (queryString: string) => Promise<void> |
键盘导航
| 按键 | 行为 |
|---|---|
↑ / ↓ | 移动高亮 |
Enter / NumpadEnter | 选中当前项 |
Esc | 关闭下拉 |
Tab | 关闭下拉 |
Home / End | 跳到首 / 末项 |
PageUp / PageDown | 翻 10 项 |
