【Vue Router】Vue Routerを使って2つのコンポーネントを画面遷移なしで切り替えたい
こちらの記事の手順を参考にして、まずはVuexとVue Routerをインストールします。
該当ディレクトリ・ファイルの作成
vue init webpack ~~~~コマンドでパッケージがインストールできたら、該当ディレクトリ・ファイルの作成をしていきましょう。
src/views/Home.vue
<template> <div class="home"> <h1>Home</h1> </div> </template>
src/views/Product.vue
<template> <div class="product"> <h1>商品紹介</h1> </div> </template>
src/router.js
import Vue from 'vue' import VueRouter from 'vue-router' // ルート用のコンポーネントの読み込み import Home from '@/views/Home.vue' import Product from '@/views/Product.vue' // Vuexと同様で最初にプラグインとして登録 Vue.use(VueRouter) //VueRouterインスタンスの生成 const router = new VueRouter({ //URLのパスと紐付くコンポーネントをマッピング routes: [ { path: '/', component: Home }, { path: '/product', component: Product } ] }) //生成したVueRouterインスタンスをエクスポート export default router
main.jsにrouter.jsを登録
import Vue from 'vue' import App from './App' //routerの読み込み import router from './router.js' new Vue({ el: '#app', router, //router.jsを登録 render: h => h(App) })
App.vueにVue Routerを描画
<template> <div id="app"> <!--VueRouterを呼び出し--> <nav> <router-link to="/">Home</router-link> <router-link to="/product">Product</router-link> </nav> <router-view /> </div> </template>
URLに#が付く
今の状態だと画面遷移はないものの、URLに自動的に#が付くため、ページ内リンクを使用することができません。
解決策としては以下のようにmode項目を増やし、historyを指定してあげることです。
router.js
const router = new VueRouter({ //#モードからhistoryモードにすれば解決! mode: 'history', routes: [ { path: '/', component: Home }, { path: '/product', component: Product } ] })
まとめ
これでHome.vueとProduct.vueの画面を切り替えるだけの単純なSPAができたはずです。