前置き
⬇️パンくずリストあり: 化粧品一覧ページ, index
⬇️パンくずリストなし: お問い合わせページ
今回はパンくずリストを🥐
ページによって表示/非表示の
切り替えをしていきます🌱👀
$route.name
で
表示しているurlを取得し、
それに応じて表示の
切り替えをしていきます🌟
$route.params
や$router.push
は記事にしていたのですが$route.name
は初めてです❤️🤗
⬇️middlewareで1度だけ使用しましたが、
細かい解説は特にしておりません😳💦
【Nuxt.js】Nuxt文法編:middleware
公式に沿ったルーティングまとめの記事を
出しても良いかもしれないですね🤔💭
https://ja.nuxtjs.org/docs/2.x/features/file-system-routing
構成
構成は分かってる❗️
という方は飛ばしちゃってください✈️
コンポーネント
アトミックデザイン
まずはコンポーネントの
構成を考えていきましょう🧸💭
⬇️componentsの分け方は
こちらを参考にしてください💁♀️💕
【Nuxt.js】Nuxt番外編:
アトミックデザインにおけるフォルダの分け方と
サンプル集
パンくずリストはサイズは小さいですが、
役割としてはナビになるため
templatesに入れています。
directory
components/
--| templates/
----| headers/
------| HeaderDefault.vue
----| navs/
------| NavBread.vue
layouts/
--| default.vue
pages/
--| cosmetics/
----| index.vue
--| faq.vue
--| index.vue
パンくず < ヘッダー < layout
⬇️パンくずはこんな感じ🍞
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<template> <div class="nav nav-breadcrumb section"> <div class="container"> <nuxt-link class="txt txt-link" to="/" > TOP </nuxt-link> <img src="/imgs/arw-right.png" alt=""> <p class="txt"> コスメ一覧 </p> </div> </div> </template> <script> export default { } </script> <style lang="scss" scoped> .nav-breadcrumb { } </style> |
⬇️HeaderDefault.vue
に
NavBreade
をimportします。<NavBread v-if="hoge" />
v-if
を使って
表示切り替えができそうですね💡
が、一旦おいておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<template> <div class="header header-default"> <header class="head"> <div class="container"> ここにheaderの中身 </div> </header> <NavBread /> </div> </template> <script> import NavBread from '~/components/templates/navs/NavBread.vue' export default { components: { NavBread, } } </script> <style lang="scss" scoped> </style> |
⬇️layouts/default.vue
に
HeaderDefault
を入れて
表示の固定をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<template> <div class="layout"> <HeaderDefault /> <nuxt /> </div> </div> </template> <script> import HeaderDefault from '~/components/templates/headers/HeaderDefault.vue' export default { components: { HeaderDefault, } } </script> |
これで準備OKです✨🙆♀️
CSS
基本的にいつも省略しているのですが、
使ったものを書いておきます✍️
MDN: box-shadowbox-shadow: x, y, blur, spread, color;
MDN: CSS フレックスボックスレイアウトdisplay: flex;
justify-content: space-between;
align-items: center;
フレックスボックスのチートシート
⚠️text-align: center;
だけで良い場合はflex
不要
配色について
今回のカラーは完全に好みで決めましたが、
イメージから色を決めるのもオススメです✨🎨
https://www.canva.com/ja_jp/learn/100-color-combinations/
https://photoshopvip.net/86191
https://photoshopvip.net/102159
ある程度イメージが固まったら
自動で配色を決めてくれるツールを
使うと簡単で良いですね🤗💕
$route.nameで表示を切り替える
HeaderDefault
にimport
したNavBread
にv-if
が使えそうでしたね💡
その真偽値を出すために$route.name
を使用します。
表示しているurlに対応するname
が
真の時に表示させれば良いんです🌷
表示するのはfaq以外のページです。
$route.name
は
Vue検証のここで
見ることができます✨👀
computed
で真偽値の判定をします。
⬇️computedの記事はこちら
【Nuxt.js】Nuxt文法編:computed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<template> <div class="header header-default"> <header class="head"> <div class="container"> ここにヘッダーの中身 </div> </header> <NavBread v-if="isBread" /> </div> </template> <script> import NavBread from '~/components/templates/navs/NavBread.vue' export default { components: { NavBread, }, computed: { isBread () { return this.$route.name === 'index' || this.$route.name === 'cosmetics' || }, }, } </script> <style lang="scss" scoped> </style> |
完成です🎉✨
本当にコード数行だけですね👏😂
まとめ
コンポーネントの構成に慣れていて$route
を知っていれば
パッと思いついた方も
多いかもしれませんね💡😉
Nuxtでは動的ルーティング$route
を活かして
できることが沢山あります🌟
ぜひこちらもチャレンジしてください❤️💪
⬇️route関連の記事はこちら
【Nuxt.js】Vue Router復習編:params, queryを使おう
【Nuxt.js】Modal実践編:QueryでModalを管理する①
【Nuxt.js】pagination実践編:$router.pushで簡単実装!