Skip to content

Command 命令菜单 ​

快速、可组合的命令菜单。输入即可过滤(前缀、子串或模糊子序列,以及关键词);↑ / ↓ 移动高亮,回车选中。

基础用法 ​

网页近似预览,真机效果以 HarmonyOS 渲染为准。

对话框 ​

SCommandDialog 在居中的对话框中显示命令面板,选择后自动关闭。

网页近似预览,真机效果以 HarmonyOS 渲染为准。

长列表(数据模式) ​

传入 items 代替插槽内容:结果列表是虚拟化的,不匹配的项根本不会构建,匹配项中也只构建可见的那些。试试输入 "echo 42"、"set 19" 或 "dlt"。

网页近似预览,真机效果以 HarmonyOS 渲染为准。

MANY_COMMANDS.length 项 · query = "…" · selected = …

API ​

从组件库源码中的 @Param / @Event / @BuilderParam 声明自动提取。

SparkCommandDataList ​

SCommand({ items }) 的虚拟化结果列表(ADR D14):List + Repeat(...).virtualScroll(),包含条目 / 分组标题两种模板。 只有可见的行(加上 cachedCount)才会存在;被过滤掉的项根本不在 entries 中。高度是显式的(各行高度之和,上限为 maxListHeight),并通过 childrenMainSize 提供每一行的精确高度,因此 scrollToIndex 无需测量帧节点即可让高亮项保持可见。 行只接收 @Param(复用的行不会在任何地方注册)。

属性类型默认值说明
entriesSparkCommandRow[][]
highlightedstring''
maxListHeightnumber300
rowsFocusablebooleanfalse行可获得键盘焦点(无搜索框);当输入框持有焦点并驱动高亮时为 false
事件类型默认值说明
onPick(value: string) => void() => { }
onHighlight(value: string) => void() => { }

SCommand ​

shadcn-vue Command(cmdk):可搜索、可用键盘导航的操作列表。

条目按查询词不区分大小写匹配(前缀、子串,然后是子序列——见 sparkCommandScore);没有匹配项的分组会隐藏;↑ / ↓ 移动高亮,Enter 选中。 结果保持文档顺序(只过滤,不重新排序)。

数据模式(长列表,ADR D14):传入 items 代替插槽内容。此时 Command 会渲染自带的 搜索框和虚拟化列表(List + Repeat.virtualScroll()):不匹配查询的项根本不会构建, 匹配项中也只构建可见的行。

相邻且 group 相同的条目共用一个分组标题。在搜索框中按 ↑ / ↓ 移动高亮(列表会滚动到高亮项),Enter 或点按激活条目(先调用条目的 onSelect,再调用 onItemSelect)。value 必须 唯一。showInput: false 会去掉搜索框(此时由行获得焦点)。

属性类型默认值说明
shouldFilterbooleantruefalse:无论查询内容如何都显示每个条目(自行通过 onQueryChange 过滤数据)
itemsSparkCommandEntryData[] | undefinedundefined数据模式:条目(带内置搜索框的虚拟化列表);undefined 表示插槽模式
placeholderResourceStr$r('app.string.spark_command_placeholder')数据模式:搜索框占位文字
emptyTextResourceStr$r('app.string.spark_no_results')数据模式:没有匹配项时显示的文字
maxListHeightnumber300数据模式:结果列表的最大高度(vp)
showInputbooleantrue数据模式:是否渲染搜索框(false:由行获得焦点,查询词由开发者驱动)
autoFocusbooleanfalse数据模式:Command 出现时让搜索框获得焦点(指针设备;触屏上不弹出键盘)
事件类型默认值说明
onQueryChange(query: string) => void() => { }
onItemSelect(value: string) => void() => { }选中任意条目后触发(携带其值)

插槽: 子组件(尾随闭包)

SCommandInput ​

flex h-9 items-center gap-2 border-b px-3,包含一个搜索图标和无边框的输入框。

属性类型默认值说明
placeholderResourceStr$r('app.string.spark_command_placeholder')
autoFocusbooleanfalse出现时聚焦输入框(指针设备;触控设备上避免使用,以免键盘弹出)

SCommandList ​

可滚动的结果列表:max-h-[300px] overflow-y-auto。

属性类型默认值说明
maxListHeightnumber300滚动前的最大高度,单位 vp

插槽: 子组件(尾随闭包)

SCommandEmpty ​

查询词没有匹配任何条目时显示:py-6 text-center text-sm。

属性类型默认值说明
textResourceStr$r('app.string.spark_no_results')

插槽: 子组件(尾随闭包)

SCommandGroup ​

overflow-hidden p-1,可选标题使用 px-2 py-1.5 text-xs font-medium text-muted-foreground。

属性类型默认值说明
headingResourceStr | undefinedundefined

插槽: 子组件(尾随闭包)

SCommandSeparator ​

-mx-1 h-px bg-border;搜索时隐藏。

无属性。

SCommandItem ​

单个结果行:relative flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm,高亮时使用强调色背景(键盘 ↑/↓ 或指针悬停——立即切换,从不交叉淡入);按下只会让该行变淡(对于选择行,按下的背景与高亮背景并列会显得像两个高亮)。激活通过行本身的原生 onClick 完成——点按、点击、屏幕阅读器、空格键——另外在输入框中按 Enter 也可激活(命令没有输入框时则作用于已聚焦的行);会触发 onSelect(value)。在条目上链式调用的 .onClick() 不会触发(行自身的点击会接管)。

属性类型默认值说明
valuestring''
textResourceStr''
iconstring | undefinedundefined
shortcutstring | undefinedundefined
keywordsstring[][]额外的搜索关键词
disabledbooleanfalse
checkedboolean | undefinedundefinedundefined:没有勾选插槽;true / false:显示 / 保留尾部的对勾(Combobox)
事件类型默认值说明
onSelect(value: string) => void() => { }

SCommandDialog ​

shadcn-vue CommandDialog:放在居中对话框中的 Command 命令面板(p-0 overflow-hidden)。

选中条目后会关闭,除非设置 closeOnSelect: false。长命令面板请使用数据模式: SCommandDialog({ open: this.palette!!, items: COMMANDS, autoFocus: true, onItemSelect: ... })。

属性类型默认值说明
open!!boolean | undefinedundefined
defaultOpenbooleanfalse
closeOnSelectbooleantrue
shouldFilterbooleantrue
titleResourceStr$r('app.string.spark_command_palette')无障碍标题(shadcn 将其渲染为仅屏幕阅读器可见)
itemsSparkCommandEntryData[] | undefinedundefined数据模式(见 SCommand):虚拟化命令面板的条目,代替插槽内容
placeholderResourceStr$r('app.string.spark_command_placeholder')
emptyTextResourceStr$r('app.string.spark_no_results')
maxListHeightnumber300
autoFocusbooleanfalse数据模式:打开时让搜索框获得焦点(指针设备)
事件类型默认值说明
onOpenChange(open: boolean) => void() => { }
onItemSelect(value: string) => void() => { }选中任意条目后触发(携带其值)

插槽: 子组件(尾随闭包)

MIT Licensed