Nuxt 内容
在构建登录页面、文档、博客甚至变更日志时,您需要管理内容。您可以通过为每个内容创建一个新页面、从 CMS 获取内容、存储在您自己的数据库中,等等,或者使用 @nuxt/content
模块来使用 Git 管理您的内容。
安装
要开始使用,您可以按照 官方指南 操作,或者简单来说
pnpm i @nuxt/content
然后将模块添加到您的 nuxt.config.ts
文件中
export default defineNuxtConfig({
extends: ['@nuxt/ui-pro'],
modules: [
'@nuxt/content',
'@nuxt/ui'
]
})
@nuxt/ui
之前注册 @nuxt/content
,否则 Tailwind CSS 类将不会在您的 .md
和 .yml
文件中解析。现在 @nuxt/content
模块已安装,该层将自动配置语法 highlight
主题(使用 material-theme
)并预加载一些语言,因此您无需这样做。
组件
您可能正在使用 @nuxt/content
来构建文档。为了帮助您完成此任务,我们构建了一些您可以在页面中使用的组件
- 使用 ContentSearch 组件开箱即用地获得完整的文本搜索命令面板。无需再设置 Algolia DocSearch 了。
- 使用 ContentToc 组件获得粘性目录。
- 使用 ContentSurround 组件获得上一个/下一个导航。
排版
为了充分利用 @nuxt/content
,我们使用 @tailwindcss/typography
插件来为您的内容设置样式。插件的默认设置已被覆盖,以使用来自您 应用程序配置 的 primary
和 gray
颜色,以及许多其他自定义选项,因此它与 Nuxt UI 的设计系统相匹配。
您可以将 <ContentSlot />
或 <ContentRenderer />
包裹在 PageBody 组件及其 prose
类中,以自动将 prose prose-primary dark:prose-invert max-w-none
类应用于您的内容,并使其看起来很棒。
为了帮助您编写内容,我们还添加了一些组件,以便使用 MDC 语法 在您的 .md
文件中使用它们,例如 Callout、Card、CodeGroup、Tabs 等等。
实用程序
一些实用程序将被 **自动导入**,以在 @nuxt/content
和 @nuxt/ui-pro
之间架起桥梁
mapContentNavigation
此实用程序将映射来自 fetchContentNavigation
的导航(通常在您的 app.vue
文件中获取),并将其递归地转换为组件(例如 NavigationTree)所期望的对象数组。
<script setup lang="ts">
const { data: navigation } = await useAsyncData('navigation', () => fetchContentNavigation(), { default: () => [] })
</script>
<template>
<UHeader>
<template #panel>
<UNavigationTree :links="mapContentNavigation(navigation)" />
</template>
</UHeader>
</template>
findPageHeadline
此实用程序将允许您根据页面的 _dir
在 PageHeader 中绑定 headline
。
<script setup lang="ts">
const route = useRoute()
const { data: page } = await useAsyncData(route.path, () => queryContent(route.path).findOne())
const headline = computed(() => findPageHeadline(page.value))
</script>
<template>
<UPage>
<UPageHeader v-bind="page" :headline="headline" />
</UPage>
</template>
findPageBreadcrumb
此实用程序将根据导航递归地查找页面的面包屑,以便您可以在 PageHeader 的 #headline
插槽中使用它。
<script setup lang="ts">
const { data: navigation } = await useAsyncData('navigation', () => fetchContentNavigation())
provide('navigation', navigation)
</script>
<script setup lang="ts">
import type { NavItem } from '@nuxt/content'
const navigation = inject<Ref<NavItem[]>>('navigation', ref([]))
const route = useRoute()
const { data: page } = await useAsyncData(route.path, () => queryContent(route.path).findOne())
const breadcrumb = computed(() => mapContentNavigation(findPageBreadcrumb(navigation.value, page.value)))
</script>
<template>
<UPage>
<UPageHeader v-bind="page">
<template #headline>
<UBreadcrumb :links="breadcrumb" />
</template>
</UPageHeader>
</UPage>
</template>
您应该拥有使用 @nuxt/ui-pro
构建应用程序所需的所有信息,现在您可以探索所有可用的组件 🚀