4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Vue.js 】イベントハンドリング(v-onディレクティブ)

Last updated at Posted at 2020-03-27

イベントハンドリングとは

ボタンをクリックしたり、マウスオーバーやスクロールなどユーザーによる一連の挙動を「イベント」と呼ぶ。様々なイベントに対応して発動させる処理のことを「イベントハンドラ」と呼び、イベントハンドラをイベントと紐づけることを「ハンドル」という。

vueにおいてのイベントハンドラ

vueでイベントによってイベントハンドラを実行させるにはv-onディレクティブを用いる。

基本構文

<button v-on:イベント名="処理(関数)">add</button>
<button v-on:click="counter += 1">add</button>

省略記法

<div @イベント名="処理(関数)"></div>
sample.html
<div id="example-1">
  <button v-on:click="counter += 1">Add 1</button>
  <p>上のボタンがクリックされた回数{{ counter }} 回</p>
</div>
sample.js
var example1 = new Vue({
  el: '#example-1',
  data: {
    counter: 0
  }
})

ボタンをクリックすることでイベントハンドラが実行され、counterの数字が+1されていく。

インラインメソッドハンドラ

ここではv-on属性の値に直接javascriptの式を記述している。このような記述法をインラインメソッドハンドラという。

メソッドイベントハンドラ

イベントハンドラの仕組みはより複雑になっていくので式ではなく、メソッドの名前に置き換えることで、すっきりとしたコードが記述できる。そのような記述方法をメソッドイベントハンドラという。

sample.html
<div id="app">
  <!-- クリックすることでshowMessageメソッドが呼び出される -->
  <button v-on:click="showMessage">ボタン</button>
 <!-- 「こんにちわ」と表示される -->
  <p>{{ msg }}</p>
</div>
sample.js
new Vue({
  el: '#app',
  data: function () {
    return {
      msg: ""
    };
  },
  methods: {
    // msgに「こんにちわ」が代入される
    showMessage: function () {
      this.msg = 'こんにちわ'
    }
  }
});
イベント一覧
記述 イベントハンドラ実行タイミング
@click クリック時
@focus フォーカス時
@blur フォーカスが外れた時
@change input変更時
@dblclick ダブルクリック時
@submit サブミット時
@keyup キーアップ時
@keydown キーダウン時
@mouseover カーソルを当てた時(hoverと同じ)
@mouseout カーソルを外した時
@mouseenter カーソルを当てた時(子要素に反応させない)
@mouseleave カーソルを外した時(子要素に反応させない)
@mousedown マウスでクリックした時
@mouseup クリックしたマウスを上げた時
@mousemove マウス動かしてる時
@touchstart スマホとかでタッチした時
@touchmove タッチ状態から動かした時
@touchend 指を離した時

イベント修飾子

v-onディレクティブのイベントに対する制御をより細かく指定することのできる機能の総称をイベント修飾子という。通常のHTMLでは同じイベントをハンドルしたDOMがネストしている場合、バブリングといって子要素から外側(親要素方向)に向かって順にイベントが連鎖していく。イベント修飾子を付与することでそのバブリングを制御することができる。

基本構文.html
<button v-on:click.イベント修飾子="alert">add</button>

<!-- 修飾子は繋げることもできる -->
<button v-on:click.stop.prevent="alert">add</button>
イベント修飾子一覧
記述       機能     
.stop イベントの連鎖を止める
.prevent イベントの規定の動作をキャンセル
.capture 子要素のイベント実行時に親要素のイベントを先に実行
.self 子要素から親要素のイベントが発生しなくなる
.once イベントを一回だけ実行
.passive .preventの影響を無視

キー修飾子

特定のキーコードのキー入力時に、特定のイベントハンドラを呼び出す。

基本構文.html
<input type="text" v-on:keydown.キー修飾子="alert">

<!-- 複数つけた場合は「OR」を意味する -->
<input type="text" v-on:keydown.up.down.left.right="alert">
キー修飾子一覧
記述       機能     
.enter enterが押されたとき
.tab tabが押されたとき  
.delete deleteが押されたとき
.esc escが押されたとき  
.space spaceが押されたとき
.up 矢印の上キーが押されたとき
.down 矢印の下キーが押されたとき
.left 矢印の左キーが押されたとき
.right 矢印の右キーが押されたとき

システム修飾子

対応するキーが押されている場合にハンドラが呼び出される。

基本構文.html
<!-- shiftキーを押しながらクリックしたとき -->
<button v-on:click.shift="doDelete">削除ボタン</button>
システム修飾子一覧
記述       機能     
.ctrl ctrlが押されている場合
.alt altが押されている場合  
.shift shiftが押されている場合
.meta metaが押されている場合  
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?