Представления

Несколько слоёв компонентов для пользовательского интерфейса приложения Nuxt.

app.vue

По умолчанию Nuxt будет рассматривать этот файл как точку входа и отображать его содержимое для каждого маршрута приложения.

app.vue
<template>
  <div>
    <h1>Добро пожаловать на домашнюю страницу</h1>
  </div>
</template>
Если вы знакомы с Vue, может возникнуть вопрос: где main.js, который обычно создаёт экземпляр приложения Vue? В Nuxt это делается «за кулисами».

Компоненты

Большинство компонентов — это повторно используемые части пользовательского интерфейса, такие как кнопки и меню. В Nuxt вы можете создавать эти компоненты в директории components/, и они будут автоматически доступны в приложении без необходимости их явного импорта.

<template>
  <div>
    <h1>Добро пожаловать на домашнюю страницу</h1>
    <AppAlert>
      Это автоматически импортированный компонент.
    </AppAlert>
  </div>
</template>

Страницы

Страницы — это представления под конкретные маршруты: каждый файл в pages/ соответствует своему URL и рендерит своё содержимое.

Чтобы использовать страницы, создайте файл pages/index.vue и добавьте компонент <NuxtPage /> в app.vue (или удалите app.vue как точку входа по умолчанию). Теперь вы можете создавать больше страниц и соответствующих им маршрутов, добавляя новые файлы в директорию pages/.

<template>
  <div>
    <h1>Добро пожаловать на домашнюю страницу</h1>
    <AppAlert>
      Это автоматически импортированный компонент.
    </AppAlert>
  </div>
</template>
Узнать больше Раздел маршрутизации.

Лейауты

Лейауты — это обёртки вокруг страниц, которые содержат общий пользовательский интерфейс для нескольких страниц, например, отображение хедера и футера. Лейауты — это файлы Vue, использующие компоненты <slot /> для отображения содержимого страницы. Файл layouts/default.vue будет использоваться по умолчанию. Пользовательские лейауты можно задать как часть метаданных вашей страницы.

Если в приложении всего один лейаут, проще обойтись app.vue с <NuxtPage />.
<template>
  <div>
    <NuxtLayout>
      <NuxtPage />
    </NuxtLayout>
  </div>
</template>

Подробнее о нескольких лейаутах и их подключении к страницам — в разделе «Лейауты».

Дополнительно: Расширение HTML-шаблона

Если вам нужно изменить только <head>, вы можете обратиться к разделу SEO и метаданные.

Вы можете получить полный контроль над шаблоном HTML, добавив плагин Nitro, который регистрирует хук. Коллбэк-функция хука render:html позволяет вам изменять HTML перед его отправкой клиенту.

server/plugins/extend-html.ts
export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('render:html', (html, { event }) => {
    // Это будет объектное представление HTML-шаблона.
    console.log(html)
    html.head.push(`<meta name="description" content="Моё индивидуальное описание" />`)
  })
  // Вы также можете перехватить ответ здесь.
  nitroApp.hooks.hook('render:response', (response, { event }) => { console.log(response) })
})
Узнать больше Docs > 3 X > Guide > Going Further > Hooks.