跳至内容

运行时 API

VitePress 提供了一些内置 API,让您能够访问应用程序数据。VitePress 还附带了一些内置组件,可以在全局范围内使用。

这些辅助方法可以从 vitepress 中全局导入,通常用于自定义主题的 Vue 组件。但是,它们也可以在 .md 页面中使用,因为 markdown 文件被编译成 Vue 单文件组件

use* 开头的函数表示它是一个 Vue 3 组合式 API 函数(“组合式函数”),只能在 setup()<script setup> 中使用。

useData 组合式函数

返回页面特定的数据。返回的对象具有以下类型

ts
interface VitePressData<T = any> {
  /**
   * Site-level metadata
   */
  site: Ref<SiteData<T>>
  /**
   * themeConfig from .vitepress/config.js
   */
  theme: Ref<T>
  /**
   * Page-level metadata
   */
  page: Ref<PageData>
  /**
   * Page frontmatter
   */
  frontmatter: Ref<PageData['frontmatter']>
  /**
   * Dynamic route params
   */
  params: Ref<PageData['params']>
  title: Ref<string>
  description: Ref<string>
  lang: Ref<string>
  isDark: Ref<boolean>
  dir: Ref<string>
  localeIndex: Ref<string>
  /**
   * Current location hash
   */
  hash: Ref<string>
}

interface PageData {
  title: string
  titleTemplate?: string | boolean
  description: string
  relativePath: string
  filePath: string,
  headers: Header[]
  frontmatter: Record<string, any>
  params?: Record<string, any>
  isNotFound?: boolean
  lastUpdated?: number
}

示例

vue
<script setup>
import { useData } from 'vitepress'

const { theme } = useData()
</script>

<template>
  <h1>{{ theme.footer.copyright }}</h1>
</template>

useRoute 组合式函数

返回当前路由对象,具有以下类型

ts
interface Route {
  path: string
  data: PageData
  component: Component | null
}

useRouter 组合式函数

返回 VitePress 路由实例,以便您可以以编程方式导航到另一个页面。

ts
interface Router {
  /**
   * Current route.
   */
  route: Route
  /**
   * Navigate to a new URL.
   */
  go: (to?: string) => Promise<void>
  /**
   * Called before the route changes. Return `false` to cancel the navigation.
   */
  onBeforeRouteChange?: (to: string) => Awaitable<void | boolean>
  /**
   * Called before the page component is loaded (after the history state is
   * updated). Return `false` to cancel the navigation.
   */
  onBeforePageLoad?: (to: string) => Awaitable<void | boolean>
  /**
   * Called after the route changes.
   */
  onAfterRouteChanged?: (to: string) => Awaitable<void>
}

withBase 辅助函数

  • 类型: (path: string) => string

将配置的 base 附加到给定的 URL 路径。另请参阅 基本 URL

<Content /> 组件

<Content /> 组件显示渲染后的 markdown 内容。在 创建自己的主题 时很有用。

vue
<template>
  <h1>Custom Layout!</h1>
  <Content />
</template>

<ClientOnly /> 组件

<ClientOnly /> 组件仅在客户端渲染其插槽。

因为 VitePress 应用程序在生成静态构建时在 Node.js 中进行服务器端渲染,所以任何 Vue 使用都必须符合通用代码要求。简而言之,确保仅在 beforeMount 或 mounted 钩子中访问浏览器/DOM API。

如果您正在使用或演示不适合 SSR 的组件(例如,包含自定义指令),则可以将它们包装在 ClientOnly 组件中。

template
<ClientOnly>
  <NonSSRFriendlyComponent />
</ClientOnly>

$frontmatter 模板全局变量

在 Vue 表达式中直接访问当前页面的 前置信息 数据。

md
---
title: Hello
---

# {{ $frontmatter.title }}

$params 模板全局变量

在 Vue 表达式中直接访问当前页面的 动态路由参数

md
- package name: {{ $params.pkg }}
- version: {{ $params.version }}