Vueを使用したアプリケーションでは、Vue関数を使ってVueの新しいインスタンスを作成することで、アプリケーションが起動されます。
Vueでアプリケーションを作成する際には、Vueインスタンスの作成が必須になります。
ここでは、Vueインスタンスを作成してアプリケーションで使えるようにする方法について紹介します。
Vueインスタンスの作成とマウント
Vue.jsでは、Vue関数を使用して新しいVueインスタンスを作成します。
作成したVueインスタンスは、HTML要素にマウント(mount)して使用します。
Vueのインスタンスが状態(変数のデータ)の管理と、DOM(ドキュメント・オブジェクト・モデル)要素の管理を行ってくれます。
VueインスタンスがDOMとの関連性を保ってくれるおかげで、開発者はjQueryの時のような煩雑なDOM操作を行うことなく、簡単にDOMの操作を行うことができるようになります。
Vueインスタンスの作成
Vue.jsを利用してアプリケーションを作成するときは、まずVueインスタンスを作成します。
Vueのインスタンスは以下のようにVue関数を使用して作成します。
1 2 3 |
new Vue({ // オプション }) |
または、変数を定義して次のようにも記述します。
1 2 3 |
var vm = new Vue({ // オプション }) |
変数名の「vm」はViewModel(ビュー・モデル)の略で、Vueインスタンスを変数に格納する際の名前として、慣用的に使われています。
特に理由がなければ、変数名は「vm」としておきましょう。
Vueインスタンスのマウント
Vueのインスタンスをマウントすることで、マウント先に指定したHTML要素はVueが生成するHTML要素に置き換わります。
Vueのインスタンス内で定義したデータ(data)や振舞い(method)、算出プロパティ(computed)などの機能は、マウントしたHTML要素の中(マウントした要素とその子孫要素)でのみ使用することができます。
例えば以下のようなHTMLがあるとします。
1 2 3 |
<div id="app"> </div> |
上記の「app」というdiv要素をマウントすると
1 2 3 4 5 |
<div id="app"> <!-- この中でのみVueインスタンスで定義した各種機能が利用可能です。 --> </div> |
となります。
1 2 3 4 5 6 7 8 9 10 |
<!-- ルート(親要素) --> <div id="app"> <!-- 子要素 --> <div id="child"> <!-- 孫要素 --> <div id="grandchild"> </div> </div> </div> |
上記のように要素がネストしている場合でも、ルートとなる親要素とその子孫の要素内で、Vueの機能を使うことができます。
Vueのインスタンスをマウントする際は、次のように記述します。
1 2 3 |
new Vue({ el: '#app' }) |
「el」オプションを使用することで、要素をマウントすることができます。
要素をマウントする際は、CSSセレクタの文字列、またはDOM要素のオブジェクトを指定します。
上記の例ではidが「app」の要素をelオプションでマウントしています。
Vueのインスタンスをマウントする記述は、以下のように書くこともできます。
1 2 |
new Vue({ }).$mount('#app') |
$mountメソッドを使用してelオプションと同様にマウントする要素(ここではid)を指定します。
ここまでは、マウントする要素としてHTML内で一意となるidを指定しましたが、HTML内で同名で複数定義されるclassなどを指定することもできます。
1 2 3 4 5 6 |
<div class="app"> </div> <div class="app"> </div> <div class="app"> </div> |
1 2 |
new Vue({ }).$mount('.app') |
マウント対象の要素がHTML内に複数存在する場合は、先頭の要素がマウントの対象となります。
1 2 3 4 5 6 7 |
<div class="app"> <!-- この要素がマウントされる --> </div> <div class="app"> </div> <div class="app"> </div> |
HTML内の複数の要素にVueのインスタンスをマウントする場合は、通常複数のインスタンスを生成してマウントします。
マウントされるHTML要素は、Vueによって生成されたDOMに置き換わるので、Vueのインスタンスをマウントする前にDOMを操作したり、イベントを付与したりすると、意図しない動作になる可能性があります。
補足
※本記事で記載した内容は、Vue.js2.X以前のバージョンに対応しています。