3分钟快速上手:vue-command-palette 安装与第一个 Cmd+K 弹窗教程
【免费下载链接】vue-command-palette⌨️ A fast, composable, unstyled command palette interface for Vue.项目地址: https://gitcode.com/gh_mirrors/vu/vue-command-palette
vue-command-palette 是一个专为 Vue 3 打造的快速、可组合、无样式的命令面板(Command Palette)库。只需一行安装命令加上几行模板代码,你就能看到熟悉的 macOS Spotlight、Raycast 式 Cmd+K 弹窗在自己项目中工作,并支持模糊搜索与自定义快捷键。本文带你走完「安装 → 弹窗 → 快捷键」最短路径。
为什么需要 Vue 命令面板
命令面板让用户用键盘而不是鼠标完成高频操作——输入几个字符,模糊搜索,回车确认。它在 Vercel、Linear、Raycast 等产品中已成标配,而vue-command-palette正是把这套体验搬进 Vue 的开源方案:
- 🧩 命名空间组合式组件(
Command.Input、Command.List等),结构清晰 - 💄 完全无样式(unstyled),自带
data-属性,样式全由你掌控 - 🔍 内置 fuse.js 模糊搜索
- ⌨️ 支持给命令绑定自定义快捷键
第一步:一行命令安装 vue-command-palette
打开你的 Vue 3 项目,用任意包管理器安装:
pnpm add vue-command-palette # 或 yarn add vue-command-palette # 或 npm install vue-command-palette如果想直接阅读官方 Demo 源码,也可以克隆仓库:
git clone https://gitcode.com/gh_mirrors/vu/vue-command-palette依赖很轻,核心运行库只有fuse.js(模糊搜索)和nanoid(生成唯一 key),对首屏体积非常友好。
第二步:搭建第一个 Cmd+K 命令弹窗
新建一个组件,导入Command组合组件,并用visible状态控制弹窗显隐:
<script lang="ts" setup> import { ref } from 'vue' import { Command } from 'vue-command-palette' const visible = ref(false) </script> <template> <button @click="visible = true">打开命令面板 ⌘K</button> <Command.Dialog :visible="visible" theme="custom"> <template #header> <Command.Input placeholder="输入命令或搜索..." /> </template> <template #body> <Command.List> <Command.Empty>未找到结果</Command.Empty> <Command.Group heading="偏好设置"> <Command.Item @select="visible = false">切换暗色模式</Command.Item> <Command.Item>切换语言</Command.Item> </Command.Group> <Command.Item>新建项目</Command.Item> </Command.List> </template> </Command.Dialog> </template>结构说明:
| 组件 | 作用 | 对应 DOM 属性 |
|---|---|---|
Command.Dialog | 弹窗容器,Teleport 到 body,提供 header/body/footer 插槽 | command-dialog |
Command.Input | 搜索输入框,支持模糊搜索 | command-input |
Command.List | 命令列表容器 | command-list |
Command.Group | 按heading分组 | command-group |
Command.Item | 单个命令项,可选中、执行 | command-item |
Command.Empty | 搜索无结果时自动显示 | command-empty |
第三步:绑定 Cmd+K 快捷键
官方推荐用@vueuse/core的useMagicKeys监听按键(不是只能用 Cmd+K,任意组合键都可以):
<script lang="ts" setup> import { ref, watch } from 'vue' import { useMagicKeys } from '@vueuse/core' const visible = ref(false) const keys = useMagicKeys() const CmdK = keys['Meta+K'] // macOS 的 Cmd,Windows 可用 'Control+K' watch(CmdK, (v) => { if (v) visible.value = true }) </script>现在按Cmd + K弹窗打开,按Esc或点击遮罩关闭——一套完整的 Cmd+K 体验已经跑起来了。
命令面板样式与动画:无样式反而更自由
库本身不带任何样式,每个组件都输出command-前缀的data-属性,直接写 CSS 即可,例如:
[command-root] { background: #fff; }两个内置动画技巧:
- 弹窗进出场动画:
Command.Dialog内部已包裹 Vue 的 Transition,动画名为command-dialog,写对应的.command-dialog-enter-active等类名即可; - 列表高度动画:通过 CSS 变量
--command-list-height过渡,列表过滤时高度会平滑变化。
进阶:选中事件与执行命令
- 在
Command/Command.Dialog上监听select-item事件,拿到ItemInfo(含key和value); Command.Item支持:perform属性传入执行函数、:shortcut展示快捷键提示、:data-value指定参与模糊搜索的值;- 用
useCommandState()组合式函数可读取当前搜索词与过滤结果。
完整的命令面板示例可以直接参考官方 Demo 中的 Self.vue,以及各主题的样式方案 algolia.scss 与 raycast.scss。
核心文件导航
- 组件总入口:packages/index.ts
- 弹窗实现:packages/CommandDialog.vue
- 类型定义:packages/types.ts
- 项目说明与全部用法:README.md
到这里,你已经掌握了 vue-command-palette 安装、Cmd+K 命令弹窗搭建、快捷键绑定和样式定制的完整流程。下一步不妨照着 Demo 给列表加上图标和分组,把它变成产品里真正的主打交互。
【免费下载链接】vue-command-palette⌨️ A fast, composable, unstyled command palette interface for Vue.项目地址: https://gitcode.com/gh_mirrors/vu/vue-command-palette
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考