Vue3 : gestion des événements

Nous pouvons utiliser la directive v-on pour écouter les événements DOM et exécuter du code JavaScript.

v-onLa directive peut être abrégée par le@symbole.

Format de syntaxe:

v-on:click="methodName"
ou 
@click="methodName"

v-on

<div id="app"> <button @click="counter += 1">Ajouter 1</button> <p>Ce bouton a été cliqué {{ counter }} fois.</p> </div> <script> const app = { data() { return { counter: 0 } } } Vue.createApp(app).mount('#app') </script>

Essayez-le »

Habituellement, nous devons utiliser une méthode pour appeler une méthode JavaScript.

v-on peut accepter une méthode définie à appeler.

v-on

<div id="app"> <!--`greet` est le nom de la méthode défini ci-dessous--> <button @click="greet">Cliquez-moi</button> </div> <script>const app = { data() { return { name: 'Exemple' } }, methods: { greet(event) { // `methods` à l'intérieur de `this` pointe vers l'instance actuelle alert('Bonjour ' + this.name + '!') // `event` est l'événement DOM natif if (event) { alert(event.target.tagName) } } } } Vue.createApp(app).mount('#app')</script>

Essayez-le »

En plus de lier directement à une méthode, vous pouvez également utiliser des instructions JavaScript en ligne :

v-on

<div id="app"> <button @click="say('hi')">Dis bonjour</button> <button @click="say('what')">Dis quoi</button> </div> <script> const app = { data() { }, methods: { say(message) { alert(message) } } } Vue.createApp(app).mount('#app') </script>

Essayez-le »

Les gestionnaires d'événements peuvent contenir plusieurs méthodes, séparées par l'opérateur virgule :

v-on

<div id="app"> <!--Les deux one() et two() s'exécuteront sur l'événement click du bouton--> <button @click="one($event), two($event)">Cliquez-moi</button> </div> <script>const app = { data() { }, methods: { one(event) { alert("logique de gestion du premier événement...") }, two(event) { alert("logique de gestion du deuxième événement...") } } } Vue.createApp(app).mount('#app')</script>

Essayez-le »

Modificateurs d'événement

Vue.js fournit des modificateurs d'événements pour v-on afin de gérer les détails des événements DOM, tels que event.preventDefault() ou event.stopPropagation().

Vue.js, via le point.représentant le suffixe de directive, invoque les modificateurs.

  • .stop- Arrêter la propagation
  • .prevent- Empêcher l'événement par défaut
  • .capture- Arrêter la capture
  • .self- Écouter uniquement les événements qui se déclenchent sur cet élément
  • .once- Déclencher une seule fois
  • .left- Événement de clic gauche
  • .right- Événement de clic droit
  • .middle- Événement de la molette de défilement centrale
<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联  -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>

<!-- click 事件只能点击一次,2.1.4版本新增 -->
<a v-on:click.once="doThis"></a>

Modificateurs de touches

Vue permet d'ajouter des modificateurs de touches à v-on lors de l'écoute d'événements clavier :

<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
<input v-on:keyup.13="submit">

Il est difficile de se souvenir de tous les keyCodes, donc Vue fournit des alias pour les touches les plus couramment utilisées :

<!-- 同上 -->
<input v-on:keyup.enter="submit">
<!-- 缩写语法 -->
<input @keyup.enter="submit">

Tous les alias de touches :

  • .enter
  • .tab
  • .delete(Capture les touches « Delete » et « Backspace »)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

Touches de modification système :

  • .ctrl
  • .alt
  • .shift
  • .meta

Modificateurs de bouton de souris :

  • .left
  • .right
  • .middle

Exemple

<p><!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Faire quelque chose</div>

Modificateur .exact

.exactLe modificateur permet de contrôler les événements déclenchés par une combinaison exacte de modificateurs système.

Exemple

<!-- Déclenché même lorsque Alt ou Shift sont également enfoncés -->
<button @click.ctrl="onClick">A</button>

<!-- Déclenché si et seulement si Ctrl est enfoncé -->
<button @click.ctrl.exact="onCtrlClick">A</button>

<!-- Déclenché uniquement lorsqu'aucun modificateur système n'est enfoncé -->
<button @click.exact="onClick">A</button>
Autres extensions