Nuxt.jsでヘッダーやフッターなどの共通部分を分割する方法をメモ。
サンプルコード
pages/index.vueは以下のような状態です。
<template> <h1>Hello world</h1> </template>
まずはデフォルトのレイアウトを設定してみます。
layoutsフォルダにdefault.vueを追加します。
<template>
<div class="l-wrapper">
<header class="l-header">
<p class="logo">サイト名</p>
</header>
<Nuxt />
</div>
</template>
6行目に各ページの内容が入ります。
ブラウザで確認すると、以下のような構造になりました。
<div class="l-wrapper">
<header class="l-header">
<p class="logo">サイト名</p>
</header>
<h1>Hello world</h1>
</div>
先ほどはデフォルトのレイアウトにヘッダーも追加しましたが、ヘッダーをコンポーネントとして別で管理するようにしてみます。
componentsフォルダにHeader.vueを追加します。
<template>
<header class="l-header">
<p class="logo">サイト名</p>
</header>
</template>
コンポーネントを自動でインポートできるように、nuxt.config.jsに記述を追加します。
export default {
components: true
}
layouts/default.vueでHeader.vueを読み込みます。
<template>
<div class="l-wrapper">
<Header />
<Nuxt />
</div>
</template>
これで最終的な構造は最初の例と同じ状態になりました。
<div class="l-wrapper">
<header class="l-header">
<p class="logo">サイト名</p>
</header>
<h1>Hello world</h1>
</div>
先ほどの例ではデフォルトのレイアウトを使用しましたが、一部のページだけ別のレイアウトを使用することもできます。
layouts/blog.vueを作成してみます。
<template>
<div class="l-wrapper">
<p>ブログです。</p>
<Nuxt />
</div>
</template>
このレイアウトをpages/index.vueで使ってみます。
<template>
<h1>Hello world</h1>
</template>
<script>
export default {
layout: 'blog'
}
</script>
7行目で使用するレイアウトを指定しています。
これで指定したページのみレイアウトを変更することができました。
<div class="l-wrapper"> <p>ブログです。</p> <h1>Hello world</h1> </div>
コメントが承認されるまで時間がかかります。