基礎からメモ: Vue.js CH3-p96 イベントハンドリング
v-on
ディレクティブ
Vue.js でDOMイベントを受け取るには、v-on
ディレクティブを使う。
<button v-on:click="イベントハンドラ">クリック</button>
イベントハンドラには、コンポーネントのmethods
オプションで定義したメソッド名を指定する。
<button v-on:click="handleClick">クリック</button>
v-on
は省略形で@
と書くことができる。
<button @click="handleClick">クリック</button>
例:ボタンクリックするとhandleClick
メソッドを呼び出す。
var app = new Vue({ el: '#app', data: { message: 'Hello Vue.js' }, methods: { handleClick: function() { alert(this.message); } } })
インラインメソッドハンドラ
v-on
の値にはJavaScriptの式を直接書ける。短い式なら、このインラインメソッドハンドラで対応できる。
<button v-on:click="count++">クリック</button>
$event
元のイベントオブジェクトは$event
という変数名で渡すことができる。
例:イベントオブジェクトとスコープ内のitem
プロパティをhandleClick
メソッドに渡す。
<button v-on:click="handleClick($event, item)">クリック</button>
使用可能なイベント
ブラウザがサポートしているDOMイベントは全て使える。
例: 要素のスクロールイベントをハンドル
<div v-on:scroll="handler">コンテンツ</div>
例: マウスのホイールイベントをハンドル
<div v-on:mousewheel="handler">コンテンツ</div>
例: app.show
,app.isActive
がともにtrueな場合、"item1.png"という画像が表示され、imgタグにはactive
クラスが付く。
<img src="item1.png" v-on:load="show=true" v-bind:class="{hide: !show, active: isActive}">
これを利用してボタンクリックで画像をゆっくり表示したり消したりする例
<div id="app"> <button v-on:click="handleClick">クリック</button> <img src="item1.png" v-on:load="show=true" v-bind:class="{hide: !show, active: isActive}"> </div>
var app = new Vue({ el: '#app', data: { show: true, isActive: true, }, methods: { handleClick: function() { this.show = !this.show; this.isActive = !this.isActive; } } })
ゆっくり表示・非表示させるためのスタイルも定義しておく。
img { opacity: 1; transition: opacity 1s; } img.hide { opacity: 0; }
クリックして画像が消えると、imgタグのクラスはactive
からhide
に変わる。
v-on
でフォーム入力の取得
フォームの入力値の取得には基本v-model
を使うが、v-on
で入力内容の確認後にデータ代入するなどのフック処理ができる。
var app = new Vue({ el: '#app', data: { message: 'Hello Vue.js' }, methods: { handleInput: function(event) { // 代入値のチェックなど何らか処理を行う... this.message = event.target.value } } })
- Vue.js でDOMイベントを受け取るには、
v-on
ディレクティブを使う。v-on
の値にはJavaScriptの式を直接書ける。- 元のイベントオブジェクトは
$event
という変数名で渡すことができる。- ブラウザがサポートしているDOMイベントならば全て使える。
v-on
でフォーム入力値に対するフック処理ができる。