Nuxt.jsで共通部分を分割する

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>

参考サイト

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年4月
 123456
78910111213
14151617181920
21222324252627
282930