Skip to content

运行时 API

VitePress 提供了几个内置 API 来让你访问应用数据。VitePress 还附带了一些可以全局使用的内置组件。

全局 API 通过 vitepress 虚拟模块全局可用。

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

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

useData

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

ts
interface VitePressData<T = any> {
  /**
   * 站点级元数据
   */
  site: Ref<SiteData<T>>
  /**
   * themeConfig from .vitepress/config.js
   */
  theme: Ref<T>
  /**
   * 页面级元数据
   */
  page: Ref<PageData>
  /**
   * 页面 frontmatter 数据
   */
  frontmatter: Ref<PageData['frontmatter']>
  /**
   * 动态路由参数
   */
  params: Ref<PageData['params']>
  /**
   * 页面标题 ref
   */
  title: Ref<string>
  /**
   * 页面描述 ref
   */
  description: Ref<string>
  /**
   * 当前语言环境
   */
  lang: Ref<string>
  /**
   * 当前语言环境
   */
  localeIndex: Ref<string>
  /**
   * 是否为深色主题
   */
  isDark: Ref<boolean>
  /**
   * 页面目录数据
   */
  dir: Ref<string>
}

interface SiteData<T = any> {
  base: string
  cleanUrls?: boolean
  lang: string
  dir: string
  title: string
  titleTemplate?: string | boolean
  description: string
  head: HeadConfig[]
  appearance?: boolean | 'dark'
  themeConfig?: T
  locales?: LocaleConfig<T>
  scrollOffset?: number | string
  contentProps?: Record<string, any>
}

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
}

interface Header {
  /**
   * 标题级别 `1` 到 `6`
   */
  level: number
  /**
   * 标题的标题
   */
  title: string
  /**
   * 标题的锚链接
   */
  anchor: string
  /**
   * 标题的子项
   */
  children: Header[]
}

示例:

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

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

<h1>{{ page.title }}</h1>
<p>当前主题配置:{{ theme }}</p>

useRouter

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

ts
interface Router {
  /**
   * 当前路由
   */
  route: Route
  /**
   * 导航到 url
   */
  go: (to?: string) => Promise<void>
}

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

示例:

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

const router = useRouter()

function goToHome() {
  router.go('/')
}
</script>

useRoute

返回当前路由对象。

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

withBase

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

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

$frontmatter

直接访问当前页面的 frontmatter 数据。

md
---
title: Hello
---

# {{ $frontmatter.title }}

$params

直接访问当前页面的动态路由参数

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

vitepress开发指南