import{_ as p,c as h,ag as t,j as i,a,G as l,B as k,o as e}from"./chunks/framework.C1C4sYC0.js";const v=JSON.parse('{"title":"Runtime API","description":"","frontmatter":{},"headers":[],"relativePath":"ru/reference/runtime-api.md","filePath":"ru/reference/runtime-api.md","lastUpdated":1736186893000}'),r={name:"ru/reference/runtime-api.md"},d={id:"usedata",tabindex:"-1"},g={id:"useroute",tabindex:"-1"},E={id:"userouter",tabindex:"-1"},y={id:"withbase",tabindex:"-1"},o={id:"content",tabindex:"-1"},F={id:"clientonly",tabindex:"-1"},A={id:"frontmatter",tabindex:"-1"},C={id:"params",tabindex:"-1"};function u(D,s,B,m,c,f){const n=k("Badge");return e(),h("div",null,[s[32]||(s[32]=t('

Runtime API

VitePress предлагает несколько встроенных API, позволяющих получить доступ к данным приложения. VitePress также поставляется с несколькими встроенными компонентами, которые можно использовать глобально.

Вспомогательные методы глобально импортируются из vitepress и обычно используются в компонентах Vue для пользовательских тем. Однако их можно использовать и внутри страниц .md, так как файлы markdown компилируются в однофайловые компоненты Vue.

Методы, начинающиеся с use*, указывают на то, что это функция Vue 3 Composition API («композабл»), которая может быть использована только внутри setup() или <script setup>.

',4)),i("h2",d,[s[0]||(s[0]=i("code",null,"useData",-1)),s[1]||(s[1]=a()),l(n,{type:"info",text:"композабл"}),s[2]||(s[2]=a()),s[3]||(s[3]=i("a",{class:"header-anchor",href:"#usedata","aria-label":'Permalink to "`useData` {#usedata}"'},"​",-1))]),s[33]||(s[33]=t(`

Возвращает данные, относящиеся к конкретной странице. Возвращаемый объект имеет следующий тип:

ts
interface VitePressData<T = any> {
  /**
   * Метаданные на уровне сайта
   */
  site: Ref<SiteData<T>>
  /**
   * themeConfig from .vitepress/config.js
   */
  theme: Ref<T>
  /**
   * Метаданные на уровне страницы
   */
  page: Ref<PageData>
  /**
   * Метаданные страницы
   */
  frontmatter: Ref<PageData['frontmatter']>
  /**
   * Параметры динамического маршрута
   */
  params: Ref<PageData['params']>
  title: Ref<string>
  description: Ref<string>
  lang: Ref<string>
  isDark: Ref<boolean>
  dir: Ref<string>
  localeIndex: 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>
`,4)),i("h2",g,[s[4]||(s[4]=i("code",null,"useRoute",-1)),s[5]||(s[5]=a()),l(n,{type:"info",text:"композабл"}),s[6]||(s[6]=a()),s[7]||(s[7]=i("a",{class:"header-anchor",href:"#useroute","aria-label":'Permalink to "`useRoute` {#useroute}"'},"​",-1))]),s[34]||(s[34]=t(`

Возвращает текущий объект маршрута со следующим типом:

ts
interface Route {
  path: string
  data: PageData
  component: Component | null
}
`,2)),i("h2",E,[s[8]||(s[8]=i("code",null,"useRouter",-1)),s[9]||(s[9]=a()),l(n,{type:"info",text:"композабл"}),s[10]||(s[10]=a()),s[11]||(s[11]=i("a",{class:"header-anchor",href:"#userouter","aria-label":'Permalink to "`useRouter` {#userouter}"'},"​",-1))]),s[35]||(s[35]=t(`

Возвращает экземпляр маршрутизатора VitePress, чтобы вы могли программно перейти на другую страницу.

ts
interface Router {
  /**
   * Текущий маршрут.
   */
  route: Route
  /**
   * Переход к новому URL-адресу.
   */
  go: (to?: string) => Promise<void>
  /**
   * Вызывается перед изменением маршрута. Верните \`false\`, чтобы отменить навигацию.
   */
  onBeforeRouteChange?: (to: string) => Awaitable<void | boolean>
  /**
   * Вызывается перед загрузкой компонента страницы (после того, как состояние истории
   * обновлено). Верните \`false\`, чтобы отменить навигацию.
   */
  onBeforePageLoad?: (to: string) => Awaitable<void | boolean>
  /**
   * Вызывается после изменения маршрута.
   */
  onAfterRouteChange?: (to: string) => Awaitable<void>
}
`,2)),i("h2",y,[s[12]||(s[12]=i("code",null,"withBase",-1)),s[13]||(s[13]=a()),l(n,{type:"info",text:"хелпер"}),s[14]||(s[14]=a()),s[15]||(s[15]=i("a",{class:"header-anchor",href:"#withbase","aria-label":'Permalink to "`withBase` {#withbase}"'},"​",-1))]),s[36]||(s[36]=i("ul",null,[i("li",null,[i("strong",null,"Тип"),a(": "),i("code",null,"(path: string) => string")])],-1)),s[37]||(s[37]=i("p",null,[a("Добавляет настроенный "),i("a",{href:"./site-config#base"},[i("code",null,"base")]),a(" к заданному URL-пути. Также смотрите секцию "),i("a",{href:"./../guide/asset-handling#base-url"},"Базовый URL"),a(".")],-1)),i("h2",o,[s[16]||(s[16]=i("code",null,"",-1)),s[17]||(s[17]=a()),l(n,{type:"info",text:"компонент"}),s[18]||(s[18]=a()),s[19]||(s[19]=i("a",{class:"header-anchor",href:"#content","aria-label":'Permalink to "`` {#content}"'},"​",-1))]),s[38]||(s[38]=t(`

Компонент <Content /> отображает отрисованное содержимое Markdown. Полезно при создании собственной темы.

vue
<template>
  <h1>Пользовательский макет!</h1>
  <Content />
</template>
`,2)),i("h2",F,[s[20]||(s[20]=i("code",null,"",-1)),s[21]||(s[21]=a()),l(n,{type:"info",text:"компонент"}),s[22]||(s[22]=a()),s[23]||(s[23]=i("a",{class:"header-anchor",href:"#clientonly","aria-label":'Permalink to "`` {#clientonly}"'},"​",-1))]),s[39]||(s[39]=t(`

Компонент <ClientOnly /> отображает свой слот только на стороне клиента.

Поскольку приложения VitePress при генерации статических сборок рендерятся в Node.js, любое использование Vue должно соответствовать универсальным требованиям к коду. Короче говоря, убедитесь, что доступ к API Browser / DOM осуществляется только в хуках beforeMount или mounted.

Если вы используете или демонстрируете компоненты, которые не являются SSR-дружественными (например, содержат пользовательские директивы), вы можете обернуть их внутри компонента ClientOnly.

template
<ClientOnly>
  <NonSSRFriendlyComponent />
</ClientOnly>
`,5)),i("h2",A,[s[24]||(s[24]=i("code",null,"$frontmatter",-1)),s[25]||(s[25]=a()),l(n,{type:"info",text:"глобальный шаблон"}),s[26]||(s[26]=a()),s[27]||(s[27]=i("a",{class:"header-anchor",href:"#frontmatter","aria-label":'Permalink to "`$frontmatter` {#frontmatter}"'},"​",-1))]),s[40]||(s[40]=t(`

Прямой доступ к метаданным текущей страницы в выражениях Vue.

md
---
title: Привет
---

# {{ $frontmatter.title }}
`,2)),i("h2",C,[s[28]||(s[28]=i("code",null,"$params",-1)),s[29]||(s[29]=a()),l(n,{type:"info",text:"глобальный шаблон"}),s[30]||(s[30]=a()),s[31]||(s[31]=i("a",{class:"header-anchor",href:"#params","aria-label":'Permalink to "`$params` {#params}"'},"​",-1))]),s[41]||(s[41]=t(`

Прямой доступ к параметрам динамических маршрутов текущей страницы в выражениях Vue.

md
- имя пакета: {{ $params.pkg }}
- версия: {{ $params.version }}
`,2))])}const T=p(r,[["render",u]]);export{v as __pageData,T as default};