用法
ContentSearch 组件扩展了 命令面板 组件,因此您可以传递任何属性,例如 icon
、placeholder
等。
使用通过 @nuxt/content
的 queryCollectionSearchSections
和 queryCollectionNavigation
可组合函数获取的 files
和 navigation
值,配合 files
和 navigation
属性。
useContentSearch
可组合函数来打开命令面板:const { open } = useContentSearch()
。快捷键
使用 shortcut
属性来更改用于打开 ContentSearch 组件的 defineShortcuts 快捷键。默认为 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>
颜色模式
默认情况下,一组命令将被添加到命令面板中,以便您可以在浅色和深色模式之间切换。这仅在特定页面中没有通过 definePageMeta
强制设置 colorMode
时生效
<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
或布局中使用 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: '/getting-started'
}, {
label: 'Components',
icon: 'i-lucide-box',
to: '/components'
}, {
label: 'Roadmap',
icon: 'i-lucide-chart-no-axes-gantt',
to: '/roadmap'
}]
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
属性
属性 | 默认值 | 类型 |
---|---|---|
searchTerm |
| |
icon |
|
在搜索输入框中显示的图标。 |
placeholder |
命令面板搜索输入框的占位符。 | |
loading |
当为 | |
loadingIcon |
|
当 |
shortcut |
|
打开搜索的键盘快捷键(由 |
links |
在命令面板中显示为第一个分组的链接分组。
| |
navigation |
| |
groups |
显示在导航和颜色模式分组之间的自定义分组。 | |
files |
| |
fuse |
|
|
colorMode |
|
当为 |
ui |
|
插槽
插槽名称 | 类型 |
---|---|
empty |
|
close |
|
item |
|
item-leading |
|
item-label |
|
item-trailing |
|
content |
|
事件
事件名称 | 类型 |
---|---|
update:searchTerm |
|
主题
export default defineAppConfig({
uiPro: {
contentSearch: {
slots: {
modal: 'sm:max-w-3xl sm:h-[28rem]',
input: '[&>input]:text-base/5'
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
uiPro: {
contentSearch: {
slots: {
modal: 'sm:max-w-3xl sm:h-[28rem]',
input: '[&>input]:text-base/5'
}
}
}
})
]
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import uiPro from '@nuxt/ui-pro/vite'
export default defineConfig({
plugins: [
vue(),
uiPro({
uiPro: {
contentSearch: {
slots: {
modal: 'sm:max-w-3xl sm:h-[28rem]',
input: '[&>input]:text-base/5'
}
}
}
})
]
})