前置き
Header
やFooter
, sidebar(sidemenu)
など
どのページでも固定で表示させたいコンポーネントってありますよね❓
そんな時に便利なlayout
を解説していきます🍎🙋♀️
公式サイトを元に順番に説明しています💡
https://ja.nuxtjs.org/guides/directory-structure/layouts/
layout
基本的な使い方
Header
とFooter
を固定で表示させてみます🌟
directory
layouts/
--| default.vue
pages/
--| index.vue
--| sample.vue
コード
HeaderやFooterはテキストだけなので省きます🌠
また、CSSも省略します。
ページコンポーネント(pages
内のindex.vue
など)の
レンダリングはこちらの3行です🌟
1 2 3 |
<template> <Nuxt /> </template> |
pages
が表示される位置より上にHeader
,
下にFooter
を表示させましょう🎶
) file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<template> <div class="layout"> <Header /> <nuxt /> <Footer /> </div> </div> </template> <script> import Header from '~/components/Header.vue' import Footer from '~/components/Footer.vue' export default { components: { Header, Footer, } } </script> |
) pages
使用するlayout
の指定は必要ありません。layouts/default.vue
がデフォルトで適応されます🍒😀
1 2 3 4 5 |
<template> <div class="page"> <p>sample</p> </div> </template> |
index.vue
とsample.vue
を見てみてください👀
どちらのページでもHeader
とFooter
が固定されているはずです🤗
ポイント
ページ内コンポーネントのリンクはrouter-link
またはnuxt-link
を使用します🎈🧸
⬇️解説記事はこちら
https://wp.me/pc9NHC-f5index.vue
にこちらを貼り付けてみるとHeader
などは固定されたままsample.vue
に遷移することができます🌟<nuxt-link to="/sample">リンク</nuxt-link>
カスタムレイアウト
index.vue
ではlayouts/default.vue
(Header, Footerを使用)にして
blog内のposts.vue
ではlayouts/blog.vue
(ブログ用ナビゲーションバー)を表示させてみます🌟
使い方は簡単で、
カスタムしたlayoutを指定するだけです👍❤️
1 2 3 4 5 6 7 8 9 |
<script> export default { layout: 'blog', // OR layout (context) { return 'blog' } } </script> |
directory
layouts/
--| default.vue
--| blog.vue
pages/
--| index.vue
--| blog/
-----| posts.vue
index.vue
blog/posts.vue
コード
index.vue
とlayouts/default.vue
は
基本的な使い方と全く同じです!
) file
1 2 3 4 5 6 |
<template> <div class="blog"> <div>My blog navigation bar here</div> <Nuxt /> </div> </template> |
) pages
カスタムしたlayouts/blog.vue
を指定
1 2 3 4 5 6 7 8 9 10 11 |
<template> <div class="blog"> <p>さんぷる</p> </div> </template> <script> export default { layout: 'blog', } </script> |
エラーページ
エラーが起きた際に表示されるエラーページはlayouts
に配置されます。
ファイル名はerror.vue
を使用します💡
ただページコンポーネントとして扱われるので
エラーページ内に<nuxt />
は含みません⚠️
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<template> <div class="container"> <h1 v-if="error.statusCode === 404">Page not found</h1> <h1 v-else>An error occurred</h1> <NuxtLink to="/">Home page</NuxtLink> </div> </template> <script> export default { props: ['error'], layout: 'blog' // you can set a custom layout for the error page } </script> |
まとめ
- layoutを使ってコンポーネントを固定して表示できる
- 複数のlayoutを使いたい時はカスタムレイアウトを使う
- layouts/error.vueでエラー時の固定ページも作れる