前回、"Hello, vue.js"を静的にレンダリングするだけのミニマムなシングルコンポーネントを持ったプロジェクトを作成しましたので、それをベースに拡張していきたいと思います。今回の趣旨はミニマムなルータ制御です。SPA的なクライアントアプリを組むためにはルータ機能が必要です。
やるべきことは、以下です。
- App.vueは(ほぼ)抽象的なアプリケーションコンポーネント(画面の入れ物)とする。
- 唯一の画面として、Home画面(コンポーネント)を追加する。
- vue-routerでHome画面を表示させる。
Home画面作成
h1要素を持つだけのシンプルなコンポーネントです。vue-cliが自動生成してくれるようなフォルダ構成でちまちま作っていきます。
src/vies/Home.vue
<template>
<div>
<h1>これはほーむがめんです</h1>
</div>
</template>
<script>
export default {
name: 'Home'
}
</script>
ルータ追加
画面遷移をコントロールするルータを追加します。
(1)ルータライブラリインストール
npm install vue-router
(2)ルータ実装(src/router/index.js)
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Home',
component: Home
}
]
const router = new VueRouter({
routes
})
export default router
ルート('/')とHome画面(コンポーネント)を連結させただけの
ミニマムなルータです。
(3) Vueインスタンスにルータ追加(src/main.js)
import Vue from 'vue'
import App from './App.vue'
import router from './router' <== ココ
Vue.config.productionTip = false
new Vue({
router, <== ココ
render: h => h(App),
}).$mount('#app')
こうやって、Vueインスタンスにいろんな機能モジュール(コンポーネント)を突っ込んでおくと、Vueインスタンスに対してフレームワークがいろいろよしなにさばいてくれるんですねぇ。
こうしてながめると、router/index.jsで作ったルータも一種のコンポーネントとしてとらえたほうがいいかな。
(4) Appコンポーネントにルータ(によるView)を埋め込む(src/App.vue)
<template>
<div>
<router-view/> <== ココ
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
npm run serveして、localhost:8081すると、
補足
今回のやったことはつまり、
- 抽象的なアプリケーションコンポーネントを用意する。
(複数の画面を持つアプリケーションとして、Appコンポーネントを定義する) - HOME画面を用意する。
- '/'をHOME画面と接続したルータ用意。
- アプリケーションにルータをジョイント。
って感じです。
次はサブコンポーネントを扱っていきたいと思います。