今回はVueでaタグに@click
イベントを設定する時にhrefの遷移先に遷移してしまう処理を無効化する方法を紹介します。
結論から言うと、@click.stop.prevent
と書けばokです(@click.prevent.stop
でもok)。
<script setup>
const hello = () => alert('hello!');
</script>
<template>
<div>
<!-- ↓これはだめ -->
<a href="#" @click="hello">クリックでメッセージを表示</a>
<!-- ↓こう書く -->
<a href="#" @click.stop.prevent="hello">クリックでメッセージを表示</a>
</div>
</template>
.stop
と.prevent
という2つの修飾子を繋げて書きます。
.stop
はstopPropagation()
と同じでイベントが親要素へ伝播するのを防ぎ、.prevent
はpreventDefault()
と同じでイベントのデフォルトの動作を防ぎます。
この2つの修飾子をつけないと任意の処理ではなくaタグのデフォルトの動作であるページ遷移が発火してしまい、任意の処理が発火しない原因となってしまいます。
Vueでaタグに@click
イベントを入れる時はとりあえず.stop.prevent
しておけば大丈夫そうですね。