vue-routerの設定
実習編目標
- API を利用するクライアントを書く
- 複数ページが存在するクライアントを書く
WARNING
前回に作成したサーバーを利用します。先に前回の内容を終わらせるようにしてください。
今回は「エンドポイントにアクセスする」に書いてある最重要課題を一番やってほしいです。 途中のコードなどはバシバシコピー&ペーストしてもらっても構いません。
最重要課題はこれまでのコードを上手く組み合わせることで実現できるはずです。 どのような API が必要か、それをどうやって表示すればいいかを自分で考えて作ってみましょう。
Vueのプロジェクトを作成する
第一部のVue入門の時と同じように https://github.com/traPtitech/naro-template-frontend のテンプレートリポジトリからリポジトリを作成します。 クローンしてきたディレクトリを VSCode で開いておきましょう。 npm i
するのを忘れずに。
Vue Routerの導入
SPA を作る際には、path
に応じたページを描画する Router のような補助ライブラリが使用すると便利です。 今回は、公式 Router であるVue Router v4.xを使用します。
参考: Routing | Vue.js
1. ライブラリのインストール
npm install vue-router@4
を実行してください。
2. Routerの設定
path
と描画対象の関係である Route を定義します。 src
以下に、router.ts
を以下の内容で作成してください。
import { createRouter, createWebHistory } from 'vue-router'
import HomePage from './pages/HomePage.vue'
import NotFound from './pages/NotFound.vue'
const routes = [
{ path: '/', name: 'home', component: HomePage },
{ path: '/:path(.*)*', component: NotFound }
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router
Vue Router を定義しているファイルです。
ページを追加したい場合は、routes
の中にオブジェクトを追加していけば OK です。
参考: Routes' Matching Syntax | Vue Router
App.vue
に書かれている、<router-view/>
コンポーネントが、このファイルで指定されたコンポーネントに置き換えられ描画されます。
参考:router-link
| Vue Routerrouter-view
| Vue Router
Vue Router
3. Vue Routerの使用
Vue Router を読み込むようにsrc/main.ts
を以下のように変更します。
import { createApp } from 'vue'
import App from './App.vue'
import Router from './router'
createApp(App).use(Router).mount('#app')
次に、src/App.vue
を以下のように変更します。
<template>
<main>
<div :class="$style.container">
<header :class="$style.header">
<router-link to="/">Home</router-link>
</header>
<router-view />
</div>
</main>
</template>
<style module>
.container {
max-width: fit-content;
margin: auto;
}
.header {
display: flex;
justify-content: center;
}
</style>
INFO
<router-view>
というコンポーネントは自身のpath
に応じて描画するコンポーネントを変えるものです。その設定をrouter.ts
で行っています。
また、<router-link>
は<a>
タグのようにリンクとして働きますが、ページのリロードを引き起こしません。これによってページの移動の速度を向上させることができます。
4. Homeページの作成
src
直下にpages
ディレクトリを作成し、src/pages/HomePage.vue
を以下の内容で作成してください。
<script setup lang="ts">
import HelloWorld from '../components/HelloWorld.vue'
</script>
<template>
<hello-world msg="Hello Vue 3 + Vite" />
</template>
5. NotFoundページの作成
router.ts
に定義した Route の配列は先頭からマッチします。
export const routes = [
{ path: '/', name: 'home', component: HomePage },
{ path: '/:path(.*)*', component: NotFound }
]
この後、皆さんにはいくつかのページとそのpath
の対応を追加してもらうわけですが、どのpath
にもマッチしなかった場合、任意のpath
にマッチする/:path(.*)*
がマッチし、NotFound ページが表示されます。
src/pages/NotFound.vue
を以下の内容で作成してください。
<template>
<header>
<h1>Not Found {{ $route.path }}</h1>
</header>
</template>
初期状態の確認
WARNING
PC にインストールされているセキュリティソフトによっては開発ページにアクセスできないことがあるようです。 その場合は、セキュリティソフトのファイアウォールを一時的に停止するか、ターミナルからnpm run dev
で起動した後、表示される IP アドレスでの URL にアクセスしてみてください(できない場合は TA に聞いてください)
これまでと同様にnpm run dev
で起動して、以下のような画面が表示されていれば OK です。