vue.jsの初学者が忘れないように記録しました。
違っている部分がありましたらコメントください。
理解するごとに追記していきます。
ここでは
・トップページから他のページに移るまで(MVVMモデル)の流れ
・各ファイルの役割の説明
を説明します。
MVVMモデル
モデル(M)とビュー(V)間のやり取りをビューモデル(VM)を介して行うアーキテクチャのこと。
ViewModel
・Vue.js のインスタンスのこと。
Model
・dataオブジェクト と methodsオブジェクト のこと。
・el で指定されたDOM要素のこと。elでDOM要素を指定することで、ViewModel の適用範囲を指定できます。
各ファイルの流れ
main.js→new Vue()で指定したファイル→public/index.html→router.js→子要素のVueファイル
main.js
まずは main.js から全てが始まる。
new Vue() で Vue App を起動している。この時App.vueがメイン(親)のファイル、つまりルートパスとして最初に表示される。
main.jsのmount内とpublic/index.html内のid=" "は同じにする必要がある。今回はappとしている。
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')
router.js
読み込むファイルはrouter.jsに記述しておく必要がある。
router.js
import Vue from 'vue'
import Router from "vue-router"
import page2 from '@/components/page2'
import HelloWorld from '@/components/HelloWorld'
Vue.use(Router)
export default new Router({
mode: 'history',
routes: [
{
path: '/page2',
component: page2
},
{
path: '/',
component: HelloWorld
}
]
});
App.vue
・テンプレートタグ内に<router-view></router-view>
と書いてあげることによって、router.jsに読み込んだファイルを表示する。
App.vue
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'app',
components: {
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
HelloWorld.vue
HelloWorld.vue
<template>
<div>
<img alt="Vue logo" src="../assets/logo.png">
<p>{{title}}</p>
<!-- 子コンポーネントのmessageを設定して呼び出す -->
<hello-child message='メッセージだよ'/>
<router-link to="/page2">Go to page2</router-link>
</div>
</template>
<script>
import HelloChild from './HelloChild'
export default {
data: function () {
return {
title: 'はろー!わーるど!'
}
},
components: {
HelloChild
}
}
</script>
page2.vue
page2.vue
<template>
<div>
<p>
ここはページ2です。
</p>
<router-link to="/">Go to page1</router-link>
</div>
</template>
<script>
</script>
<style>
</style>