用法
ContentSearch 组件继承自 CommandPalette 组件,因此你可以传递任何属性,例如 icon
、placeholder
等。
使用 files
和 navigation
属性,并配合从 @nuxt/content
获取的 files
和 navigation
值,以及 queryCollectionSearchSections
和 queryCollectionNavigation
组合式函数。
useContentSearch
组合式函数来打开 CommandPalette: const { open } = useContentSearch()
。快捷键
使用 shortcut
属性来更改 defineShortcuts 中用于打开 ContentSearch 组件的快捷键。默认值为 meta_k
( K)。
<template>
<UApp>
<ClientOnly>
<LazyUContentSearch
v-model:search-term="searchTerm"
shortcut="meta_k"
:files="files"
:navigation="navigation"
:fuse="{ resultLimit: 42 }"
/>
</ClientOnly>
</UApp>
</template>
颜色模式
默认情况下,一组命令将被添加到命令面板,以便你可以切换浅色和深色模式。这仅在 colorMode
没有在特定页面中强制设置时生效,可以通过 definePageMeta
实现。
<script setup lang="ts">
definePageMeta({
colorMode: 'dark'
})
</script>
你可以通过将 color-mode
属性设置为 false
来禁用此行为。
<template>
<UApp>
<ClientOnly>
<LazyUContentSearch
v-model:search-term="searchTerm"
:color-mode="false"
:files="files"
:navigation="navigation"
:fuse="{ resultLimit: 42 }"
/>
</ClientOnly>
</UApp>
</template>
示例
app.vue
中 在
在你的 app.vue
或布局中Dónde使用 ContentSearch 组件。
<script setup lang="ts">
const { data: navigation } = await useAsyncData('navigation', () => queryCollectionNavigation('content'))
const { data: files } = useLazyAsyncData('search', () => queryCollectionSearchSections('content'), {
server: false
})
const links = [{
label: 'Docs',
icon: 'i-lucide-book',
to: '/docs/getting-started'
}, {
label: 'Components',
icon: 'i-lucide-box',
to: '/docs/components'
}, {
label: 'Showcase',
icon: 'i-lucide-presentation',
to: '/showcase'
}]
const searchTerm = ref('')
</script>
<template>
<UApp>
<ClientOnly>
<LazyUContentSearch
v-model:search-term="searchTerm"
:files="files"
shortcut="meta_k"
:navigation="navigation"
:links="links"
:fuse="{ resultLimit: 42 }"
/>
</ClientOnly>
</UApp>
</template>
ContentSearch
组件包装在ClientOnly组件中,以避免在服务器端渲染。API
属性
属性 | 默认值 | 类型 |
---|---|---|
图标 |
|
输入框中显示的图标。 |
placeholder |
|
输入框的占位文本。 |
autofocus |
|
组件挂载时自动聚焦输入框。 |
loading |
当为 | |
loadingIcon |
|
当 |
close |
|
在输入框中显示一个关闭按钮(例如,当在 Modal 中时很有用)。 |
closeIcon |
|
关闭按钮中显示的图标。 |
shortcut |
|
用于打开搜索的键盘快捷键(由 |
links |
链接组显示为命令面板中的第一个组。
| |
navigation |
| |
分组 |
在导航和颜色模式组之间显示的自定义组。 | |
files |
| |
fuse |
|
用于 `useFuse` 的选项useFuse传递给CommandPalette. |
colorMode |
|
当设置为 |
title |
| |
description |
| |
叠加层 |
|
在模态框后面渲染一个叠加层。 |
过渡动画 |
|
在打开或关闭时为模态框添加动画效果。 |
内容 |
模态框的内容。
| |
可关闭的 |
|
当为 |
全屏 |
|
当为 |
modal |
对话框的模态性。当设置为 | |
portal |
|
在传送门中渲染模态框。 |
搜索词 |
|
|
ui |
|
插槽
插槽 | 类型 |
---|---|
空 |
|
页脚 |
|
返回 |
|
close |
|
item |
|
item-leading |
|
item-label |
|
item-trailing |
|
内容 |
|
事件
事件 | 类型 |
---|---|
update:searchTerm |
|
主题
export default defineAppConfig({
ui: {
contentSearch: {
slots: {
modal: '',
input: '[&>input]:text-base/5'
},
variants: {
fullscreen: {
false: {
modal: 'sm:max-w-3xl sm:h-[28rem]'
}
}
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
contentSearch: {
slots: {
modal: '',
input: '[&>input]:text-base/5'
},
variants: {
fullscreen: {
false: {
modal: 'sm:max-w-3xl sm:h-[28rem]'
}
}
}
}
}
})
]
})