0
0

More than 3 years have passed since last update.

Vue.js イベントハンドリングまとめ

Posted at

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

簡単な処理であればインラインでメソッドを定義できる。

以下のコードは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.countdataオプションに定義した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など、様々なイベント修飾子が用意されている。

0
0
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
0
0