Skip to content

基础自动补全

@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 负责。