基础自动补全
@astryxdesign/core v0.7.1 · BaseTypeahead
No selection
使用方法
组合框的引擎:一个光板输入框,加上搜索、键盘操作和画好的结果下拉。它不画输入框外壳、不画边框,也不画已选值。Typeahead 和 Tokenizer 都是在它上面拼出来的标准字段。
ts
import { BaseTypeahead } from '@astryx-vue/core/Typeahead'这版的分工和原版一样。BaseTypeahead 只管输入框、搜索源、键盘模型和下拉;标签、说明、状态文案、已选值的标签都归调用方,由调用方摆在引擎外面。这里的 label 只是输入框的无障碍名,外面已经有 <label for> 指过来时就不用传。
解剖
| 部分 | 说明 |
|---|---|
| 输入框 | 一个裸的 combobox 输入框。看得见的外壳和无障碍名由调用方提供。 |
| 加载状态 | 异步数据源还在跑时,输入框旁边显示一个带无障碍名的转圈。如果外层组件自己接管了这个忙碌提示的位置,就不再显示。 |
| 下拉 | 挂靠定位的 listbox 面板,装着当前的搜索或者首屏结果。 |
| 空状态 | 搜索完成但一条结果都没有时,显示一个禁用的 listbox 选项。 |
| 结果分组标题 | 一组结果选项上方看得见的标题。 |
| 结果行 | 选项外壳,负责高亮、选中、指针和键盘行为。 |
| 默认条目内容 | 结果行里默认画的 TypeaheadItem,也就是主文字加可选的辅助内容。 |
| 调用方画的条目内容 | 调用方通过 renderItem(这版是 item 插槽)塞进稳定结果行里的内容。 |
| 选中结果状态 | 某条结果和当前值对上时,这一行加粗,并在末尾画一个勾。 |
建议
| 指引 | 实践 |
|---|---|
| 推荐 | 标准表单字段直接用 Typeahead 或 Tokenizer。它们包着 BaseTypeahead,把原版故意不画的外壳和已选值都补上了。 |
| 推荐 | 自己给一个看得见的标签或者 aria-label,再自己套一层输入框外壳,让这个光板组合框有无障碍名、有聚焦样式、有边框、有布局。 |
| 推荐 | 把你的外壳元素通过 anchorRef 传进去,下拉就会贴着你的外壳定位,而不是只贴那个光板输入框。 |
| 避免 | 别指望它画外壳或者画已选值。BaseTypeahead 只是引擎,外面那些看得见的东西都是调用方的事。 |
| 避免 | Typeahead 或 Tokenizer 够用时就不要用 BaseTypeahead。多套一层外壳、多写一套样式,只有真要做非常规组合时才值得。 |
| 避免 | 别以为按 Escape 就把还在跑的搜索取消了。它只是把当前弹层藏起来,晚到的结果还能把弹层重新打开。 |
示例
常见的用法和不同的状态。
BaseTypeahead
自己画每一行结果,多给一条旁注,而选中语义和键盘行为仍然由 BaseTypeahead 负责。