概要
v-onでhtmlタグにイベントリスナを設定する。
v-on
記法
v-on:イベント名="メソッド名"
App.vue
<script setup lang="ts">
import { ref } from "vue";
const text = ref("クリックして");
const onButtonClick = (): void => {
const ret = "クリックしたよ";
randValue.value = String(rand);
};
</script>
<template>
<section>
<button v-on:click="onButtonClick">クリック</button>
<p>クリックの結果: {{ text }}</p>
</section>
</template>
表示結果
・クリック前
クリックの結果:クリックして
・クリック後
クリックの結果:クリックしたよ
引数の設定
関数に引数を渡すことが可能。
ただし、引数がある場合はイベントオブジェクトを$event
で記述する必要がある。
値を渡す引数のみの場合
App.vue
<script setup lang="ts">
import { ref } from "vue";
const text = ref("クリック前");
const onBtnClick = (args: string): void => {
text.value = args;
};
</script>
<template>
<button v-on:click="onBtnClick('クリック後')">クリック</button>
<p>クリックの結果:{{ text }}</p>
</template>
表示結果
・クリック前
クリックの結果:クリック前
・クリック後
クリックの結果:クリック後
$event引数が必要な場合
App.vue
<script setup lang="ts">
import { ref } from "vue";
const text = ref("クリック前");
const msg = ref("メッセージ");
const onBtnClick = (args: string, event: MouseEvent): void => {
text.value = args;
msg.value = event.timeStamp.toString();
};
</script>
<template>
<button v-on:click="onBtnClick('クリック後', $event)">クリック</button>
<p>text:{{ text }}</p>
<p>msg:{{ msg }}</p>
</template>
表示結果
・クリック前
text:クリック前
mag:メッセージ
・クリック後
text:クリック前
mag:Event.timeStampの値
App.vue
<script setup lang="ts">
import { ref } from "vue";
const text = ref("クリックして");
const onButtonClick = (): void => {
const ret = "クリックしたよ";
randValue.value = String(rand);
};
</script>
<template>
<section>
<button v-on:click="onButtonClick">クリック!</button>
<p>クリックの結果: {{ text }}</p>
</section>
</template>
表示結果
・クリック前
クリックの結果:クリックして
・クリック後
クリックの結果:クリックしたよ
v-onの修飾子
修飾子 | 内容 |
stop | イベントのバブリングをキャンセル |
capture | イベントリスナをキャプチャモードに設定 |
self | イベントが該当要素で発生した場合のみ実行 |
prevent | イベントの既定の処理をキャンセル |
passive | 該当イベントんおデフォルトの挙動が即時実行される |
once | イベントの実行を一回のみとする |
v-on修飾子の記述例(preventの例)
記法
v-on:イベント名.修飾子="メソッド名"
App.vue
<script setup lang="ts">
import { ref } from "vue";
const msg = ref("未送信");
const onFormSubmit = (): void => {
msg.value = "送信しました";
};
</script>
<template>
<form action="#" v-on:submit.prevent="onFormSubmit">
<input type="text" required>
<button type="submit">送信</button>
</form>
<p>結果:{{ msg }}</p>
</template>
表示結果
・クリック前
結果:未送信
・クリック後
結果:送信しました
イベントの一例
フォーカス
修飾子 | 内容 |
blur | フォーカスを失ったとき |
focus | フォーカスを受けたとき |
focusin | フォーカスを失ったとき(親要素でもイベント検出可能) |
focusout | 親要素でもイベント検出可能 |
マウス
修飾子 | 内容 |
click | クリック |
dbclick | ダブルクリック |
mousemove | マウスが移動したとき |
mousedown | マウスのボタンが押されたとき |
mouseup | マウスのボタンが放されたとき |
mouseenter | マスポインタが要素に入ったとき(自要素のみ) |
mouseleave | マスポインタが要素にから出たとき(自要素のみ) |
mouseout | マスポインタが要素に入ったとき(子要素含む) |
mouseover | マスポインタが要素にから出たとき(子要素含む) |
wheel | マウスホイールが回転したとき |
入力
修飾子 | 内容 |
change | 入力が変更されたとき |
input | 入力が更新されたとき |
keydown | キーが押下されたとき |
keypress | キーを押下して文字が入力されたとき |
keyup | キーが離されたとき |
select | テキストが選択されたとき |
その他
修飾子 | 内容 |
resize | 要素サイズが変更されたとき |
scroll | スクロールされたとき |