前置き
Vueの場合はルーティングを自由にカスタムできますが、
Nuxtでは自動でルーティングが決まります💡
Nuxtでもvue-routerを
自由にカスタマイズできるのが
routerプロパティ🍒
これを使えばpath
やname
などを
自由に設定できます🤗meta
の設定もできるので
SEO対策としても使えますね👍❗️
公式APIを元に解説していきます🙋♀️
公式: https://ja.nuxtjs.org/api/configuration-router/
base
1 2 3 4 5 |
export default { router: { base: '/app/' } } |
こうするとpages
配下全てがapp
フォルダになります🍎
appフォルダに
諸々を移動するために使います💡
ディレクトリ の構成はそのままにpages
>index.vue
にアクセスしたければ
http://localhost:3000/app/sample
とすればOKです🙆♀️
routeNameSplitter
name
の区切りを変えることができるらしい…
自分の命名規則に
しっかり合わせたいんだ⚡️🎸
という人に。
⬇️通常はparent-idのように-
で区切る
コード
区切りを-
から/
に変更
1 2 3 4 5 |
export default { router: { routeNameSplitter: '/' } } |
extendRoutes
path
やname
を自由に設定することで
テンプレートを他のurlでも
表示させたい場合に使えます🎈🧸
これは結構使い道があるかもしれません💡
わざわざlayout
にしなくても使いたい時とか。
あとはmeta
を追加できるので、
そちらも後半ご紹介します!
例①1つのテンプレートを使い回す
pages/sample.vue
を
http://localhost:3000/sample
以外でも表示させたい場合。
http://localhost:3000/url
で表示させてます。
表示が確認できれば良いので名前は適当です😂笑
コード
) pages
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<template> <div class="page"> <p class="text">サンプル</p> </div> </template> <script> export default { } </script> <style lang="scss" scoped> </style> |
1 2 3 4 5 6 7 8 9 10 11 |
export default { router: { extendRoutes(routes, resolve) { routes.push({ name: 'abc', path: '/url', component: resolve(__dirname, 'pages/sample.vue') }) } }, } |
例②存在しないページは全てerrorページにする
http://localhost:3000/parent
tを取って
http://localhost:3000/paren
にしてみましょう。
⬇️こうなってしまいますね。
⬇️こちらのページを表示させてみましょう🌟
コード
) pages
pages/404.vueを作成
1 2 3 4 5 6 7 8 9 10 11 12 |
<template> <div> <h1>Page Not Found</h1> <h2>お探しのページが見つかりません</h2> <p> URLに間違いないか確認し、再度アクセスを試してください。 また、つながらない場合は時間をおいて再度アクセスしてください。 </p> </div> </template> <script></script> |
path
は*
で全てに適応pages
に存在しないurlの場合は
全てpages/404.vue
を表示してくれます。
ただ01のbase
部分には影響しないので
ap/はエラーになるけど
app/なんでもOKになりました。
1 2 3 4 5 6 7 8 9 10 11 |
export default { router: { extendRoutes(routes, resolve) { routes.push({ name: 'custom', path: '*', component: resolve(__dirname, 'pages/404.vue') }) } }, } |
カスタムしたエラーページが表示されており、name
もcustom
になっていることが確認できます👀
エラーページならlayouts/error.vue
で作成してもOKです。
その場合はname
がないのでname
を使用したい場合はこっちの方が良いのかも。
metaの設定
extendRoutes
にmeta
を追加するだけ!
1 2 3 4 5 6 7 8 9 10 11 12 |
export default { router: { extendRoutes(routes, resolve) { routes.push({ name: 'sample2', path: '/sample2', component: resolve(__dirname, 'pages/sample.vue') meta: {meta1: 'meta1つめ', meta2: 'meta2つめ'} }) } }, } |
fallback
キャッシュを残すかどうかの設定です。
linkActiveClass
nuxt-link
でネストしたリンクにだけdefault
でつくnuxt-link-active
クラス。
このクラス名を変えられます💫
default
がnuxt-link-active
ですがactive-link
など自由に設定できるようになっています。
コード
1 2 3 4 5 |
export default { router: { linkActiveClass: 'active-link' } } |
linkExactActiveClass
nuxt-link
で完全一致の場合にのみ
つくクラスがあります😯default
がnuxt-link-exact-active
です。
完全一致なのでindex.vue
であればnuxt-link to="/"
の場合にのみつきます🍒
このクラス名を自由に設定できます。
コード
1 2 3 4 5 |
export default { router: { linkExactActiveClass: 'exact-active-link' } } |
linkPrefetchedClass
prefetchとは
公式: https://ja.nuxtjs.org/api/components-nuxt-link/
prefetch
=先読みnuxt-link
で先読みさせたいページにはprefetch
属性をつけます🌟
コード
1 |
<nuxt-link to="/about" prefetch>先読みするページについて</nuxt-link> |
linkPrefetchedClass
prefetch
の名前を変えたい場合に使用します。
コード
1 2 3 4 5 |
export default { router: { linkPrefetchedClass: 'nuxt-link-prefetched' } } |
まとめ
基本的にはrouter
周りの
名称が変えられる、
ということみたいですね💫🧞♂️
実用的なのはbase
でディレクトリを移動させたり、extendRoutes
でページを使いまわしたり、
SEO対策をしたり、
といったところでしょうか🤔💭