はじめに
Nuxt3
で開発する際に、ページのルーティングについて下記のように戸惑うことがあります。
たとえば、「app.vue
には何を書いたらいいの??」。
Next.jsのように自由に書いているとルーティングに失敗してしまいます。
この記事では、私を含めてルーティングについての備忘録を残しておきます。
ディレクトリ構成
Nuxt3
では、ルーティングする際はcomponents
やpages
フォルダを別に作成してその配下にVueファイルを配置するようにします。
ちなみにapp.vue
は、プロジェクト作成時の時と同じ階層になります。
.
└── Project/
├── .nuxt
├── .output
├── components/
│ └── navbar/
│ └── navbar.vue
├── node_modules
├── pages/
│ ├── adminUsers
│ ├── generalUsers/
│ │ └── registration/
│ │ └── registration.vue
│ ├── index.vue
│ ├── public/
│ │ ├── favicon.ico
│ │ └── robots.txt
│ └── server/
│ └── tsconfig.json
├── app.vue
├── nuxtconfig.ts/
│ ├── package.json
│ └── package-lock.json
├── README
└── tsconfig.json
pagesフォルダにアクセスするにはapp.vue
は記載する内容
前述したpages
フォルダにトップページapp.vue
からアクセスするには、<NuxtPage />
コンポーネントが必要になります。
<template>
<div>
<NuxtPage />
</div>
</template>
index.vue
を作成して共通コンポーネントを読み込む
index.vue
を作成して共通のコンポーネントを作成します。このindex.vue
があることでプロジェクトを起動して最初のページが表示された時にレイアウトが表示されるようになります。
<script setup="ts">
import { Navbar } from "#components";
</script>
<template>
<Navbar/>
<div>
</div>
</template>
Navbar
コンポーネントは、components
ディレクトリで作成後に、index.vue
にインポートしています。
べつの話になりますが、ページ遷移するときに使用するモジュールuseRouter
は、管理パッケージでインポートしなくても使えます。
この点は、Next.js
とは異なる点です。
<script setup="ts">
const router = useRouter();
const clickRegistration = ()=>{
router.push('/generalUsers/registration/registration');
}
</script>
<template>
<v-card>
<v-layout>
<v-app-bar color="primary">
<v-app-bar-nav-icon variant="text" @click.stop="drawer = !drawer"></v-app-bar-nav-icon>
<v-toolbar-title>My Todo Task</v-toolbar-title>
<template v-if="$vuetify.display.mdAndUp">
<v-btn icon="mdi-magnify" variant="text"></v-btn>
<v-btn icon="mdi-filter" variant="text"></v-btn>
</template>
<v-btn @click="clickRegistration">Register</v-btn>
</v-app-bar>
</v-layout>
</v-card>
</template>
ルーティングの確認
では、app.vue
に<NuxtPage />
コンポーネントを追加したことでページ遷移できるか確認してみましょう。
ナビゲーションバーの、「Regiter」ボタンをクリックすると...
以上です。
参考サイト