インラインメソッドハンドラ
簡単な処理であればインラインでメソッドを定義できる。
以下のコードはbutton
要素にイベントハンドラv-on:click
を設定し、button
をクリックするたびに{{ count }}
の値が1増えていく。
js
var app = new Vue({
el: '#app',
data: {
count: 0 // countプロパティに0をセット
}
})
html
<div id="app">
<p>
{{ count }}
</p>
<button v-on:click="count++">
Click!
</button>
</div>
メソッドイベントハンドラ
先ほどの同じ処理をmethods
オプションで定義してみる
this.count
でdata
オプションに定義したcount
にアクセスできる
js
var app = new Vue({
el: '#app',
data: {
count: 0 // countプロパティに0をセット
},
methods: { // methodsオプション
clickHandler() { // メソッドを定義
this.count++
}
}
})
html
<div id="app">
<p>
{{ count }}
</p>
<button v-on:click="clickHandler">
Click!
</button>
</div>
このように、テンプレート(HTML)とロジック(メソッド)は分けたほうがメンテナンス性が良くなる。
また、v-on
は@
に置き換える省略記法が用意されている
html
<!-- <button v-on:click="clickHandler">と結果は同じ -->
<button @click="clickHandler">
Click!
</button>
イベントオブジェクト
メソッドの引数にevent
オブジェクトを渡すことによって取得できる
js
methods: {
clickHandler(event) {
// 〜省略〜
}
}
次のように、引数に渡すプロパティが存在する場合は、第一引数に$event
を渡すことによって、event
オブジェクトを取得できる
html
<button v-on:click="clickHandler($event, message)">
Click!
</button>
Vueインスタンス
側にも記述する
js
methods: {
clickHandler($event, message) {
// 〜省略〜
}
}
イベント修飾子
.once
はイベントハンドラを1回だけ実行する
html
<!-- 2回目以降はボタンを押しても何も起きない -->
<button v-on:click.once="method">click</button>
その他にもイベント処理を中断する.prevent
など、様々なイベント修飾子が用意されている。