使用组件与定制组件
在建立网站时,我们可能会希望方便地在页面中使用一些 Vue 组件。关于在 VitePress 中使用 Vue 组件,你可以参考文档。
创建与注册全局组件
1. 新建一个组件 DocHero.vue
新建目录作为组件目录 .vitepress/theme/components/
,增加如下 Vue 组件:
vue
<!--./.vitepress/theme/components/DocHero.vue-->
<template>
<div class="box">
<slot ></slot>
</div>
</template>
<style scoped>
.box {
@apply mb-16 h-[200px] rounded-2xl;
@apply bg-purple-500 text-white font-bold;
@apply flex items-center justify-center;
@apply text-2xl md:text-6xl;
}
</style>
2. 注册全局组件
修改 .vitepress/theme/index.ts
ts
import DocHero from './components/DocHero.vue'
export default {
extends: DefaultTheme,
enhanceApp({ app, router, siteData }) {
app.component("DocHero", DocHero );
}
} satisfies Theme
3. 在 .md 文件中使用
md
<DocHero> Runtime API </DocHero>
# global component
This is a global component test page.
页面效果如下:
来自文档中说明:组件的命名规则
请确保自定义组件的名称要么包含连字符,要么采用PascalCase(大驼峰命名法)。否则,它将被视为内联元素,并被包裹在<p>
标签内,这将导致水合不匹配,因为<p>
标签内不允许放置块级元素。
使用已有的组件
我们也可以在 .md 中使用已有的组件,具体可参考 Team Page 的做法:https://vitepress.dev/reference/default-theme-team-page
1. 示例:使用<VPTeamMembers>
例如,如果想要在任何页面使用 <VPTeamMembers>
,我们可以这样使用:
md
<script setup>
import { VPTeamMembers } from 'vitepress/theme'
const members = [
{
avatar: 'https://www.github.com/yyx990803.png',
name: 'Evan You',
title: 'Creator',
links: [
{ icon: 'github', link: 'https://github.com/yyx990803' },
{ icon: 'twitter', link: 'https://twitter.com/youyuxi' }
]
},
...
]
</script>
# Our Team
Say hello to our awesome team.
<VPTeamMembers size="small" :members="members" />
2. 示例:使用<VPTeamPageSection>
它包含了数个 slot,可供更方便地使用:
md
<VPTeamPage>
...
<VPTeamPageSection>
<template #title>Partners</template>
<template #lead>Lorem ipsum...</template>
<template #members>
<VPTeamMembers :members="data" />
</template>
</VPTeamPageSection>
</VPTeamPage>
更多可参考:https://vitepress.dev/reference/default-theme-team-page
我们也可以绝对路径在引用theme-default
中的组件。比如,假设想使用 VPNav.vue
组件,我们可以这样导入:
ts
import VPNav from 'vitepress/dist/client/theme-default/components/VPNav.vue'