ビュー
app.vue
デフォルトでは、Nuxt はこのファイルをエントリポイントとして扱い、アプリケーションのすべてのルートに対してそのコンテンツをレンダリングします。
<template>
<div>
<h1>Welcome to the homepage</h1>
</div>
</template>
main.js (通常 Vue アプリを作成するファイル) がどこにあるのか疑問に思うかもしれません。Nuxt はこれを舞台裏で行っています。コンポーネント
ほとんどのコンポーネントは、ボタンやメニューのようなユーザーインターフェースの再利用可能な部分です。Nuxt では、これらのコンポーネントをapp/components/ ディレクトリに作成でき、明示的にインポートしなくてもアプリケーション全体で自動的に利用可能になります。
<template>
<div>
<h1>Welcome to the homepage</h1>
<AppAlert>
This is an auto-imported component.
</AppAlert>
</div>
</template>
<template>
<span>
<slot />
</span>
</template>
ページ
ページは、特定のルートパターンごとのビューを表します。app/pages/ ディレクトリ内の各ファイルは、そのコンテンツを表示する異なるルートを表します。
ページを使用するには、app/pages/index.vue ファイルを作成し、app/app.vue に <NuxtPage /> コンポーネントを追加します (app/app.vue を削除するとデフォルトのエントリになります)。これで、app/pages/ ディレクトリに新しいファイルを追加することで、さらにページとその対応するルートを作成できます。
<template>
<div>
<h1>Welcome to the homepage</h1>
<AppAlert>
This is an auto-imported component
</AppAlert>
</div>
</template>
<template>
<section>
<p>This page will be displayed at the /about route.</p>
</section>
</template>
レイアウト
レイアウトは、ヘッダーやフッターの表示など、複数のページで共通のユーザーインターフェースを含むページをラップするものです。レイアウトは、ページコンテンツを表示するために<slot /> コンポーネントを使用する Vue ファイルです。app/layouts/default.vue ファイルがデフォルトで使用されます。カスタムレイアウトは、ページメタデータの一部として設定できます。
app/app.vue を <NuxtPage /> と一緒に使用することをお勧めします。<template>
<div>
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</div>
</template>
<template>
<div>
<AppHeader />
<slot />
<AppFooter />
</div>
</template>
<template>
<div>
<h1>Welcome to the homepage</h1>
<AppAlert>
This is an auto-imported component
</AppAlert>
</div>
</template>
<template>
<section>
<p>This page will be displayed at the /about route.</p>
</section>
</template>
さらにレイアウトを作成し、ページでそれらを使用する方法を学びたい場合は、レイアウトセクションで詳細情報を参照してください。
高度: HTML テンプレートの拡張
<head> のみを変更する必要がある場合は、SEO とメタセクションを参照してください。フックを登録する Nitro プラグインを追加することで、HTML テンプレートを完全に制御できます。render:html フックのコールバック関数を使用すると、HTML がクライアントに送信される前に変更できます。
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('render:html', (html, { event }) => {
// This will be an object representation of the html template.
console.log(html)
html.head.push(`<meta name="description" content="My custom description" />`)
})
// You can also intercept the response here.
nitroApp.hooks.hook('render:response', (response, { event }) => { console.log(response) })
})