Maison > Article > interface Web > Problèmes avec les méthodes Vue et la gestion des événements
peuvent utiliser la directive v-on
pour surveiller les événements DOM :
<p id="example"> <button v-on:click="greet">Greet</button> </p>
Nous avons lié un gestionnaire d'événements de clic à une méthode greet
. Définissez cette méthode dans l'instance Vue ci-dessous :
var vm = new Vue({ el: '#example', data: { name: 'Vue.js' }, // 在 `methods` 对象中定义方法 methods: { greet: function (event) { // 方法内 `this` 指向 vm alert('Hello ' + this.name + '!') // `event` 是原生 DOM 事件 alert(event.target.tagName) } } }) // 也可以在 JavaScript 代码中调用方法 vm.greet() // -> 'Hello Vue.js!'
En plus de vous lier directement à une méthode, vous pouvez également utiliser des instructions JavaScript en ligne :
<p id="example-2"> <button v-on:click="say('hi')">Say Hi</button> <button v-on:click="say('what')">Say What</button> </p> new Vue({ el: '#example-2', methods: { say: function (msg) { alert(msg) } } }
Semblables aux expressions en ligne, les gestionnaires d'événements sont limités à une seule instruction.
Parfois, il est également nécessaire d'accéder aux événements DOM natifs dans un gestionnaire d'instructions en ligne. Vous pouvez utiliser la variable spéciale $event
pour la passer dans la méthode :
<button v-on:click="say('hello!', $event)">Submit</button>
// ... methods: { say: function (msg, event) { // 现在我们可以访问原生事件对象 event.preventDefault() } }
doit souvent appeler event.preventDefault()
ou event.stopPropagation()
dans l'événement gestionnaire. Bien que nous puissions facilement faire cela dans une méthode, il serait préférable que la méthode soit une pure logique de données et ne traite pas les détails des événements DOM.
Pour résoudre ce problème, Vue.js fournit deux modificateurs d'événements pour v-on
: .prevent
et .stop
. Vous souvenez-vous encore que les modificateurs sont des suffixes de commande commençant par un point ?
<!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form> <!-- 修饰符可以串联 --> <a v-on:click.stop.prevent="doThat"> <!-- 只有修饰符 --> <form v-on:submit.prevent></form>
1.0.16 a ajouté deux modificateurs supplémentaires :
<!-- 添加事件侦听器时使用 capture 模式 --> <p v-on:click.capture="doThis">...</p> <!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 --> <p v-on:click.self="doThat">...</p>
Lors de l'écoute des événements de clavier, nous devons souvent détecter keyCode . Vue.js permet d'ajouter des modificateurs de touches à v-on
:
<!-- 只有在 keyCode 是 13 时调用 vm.submit() --> <input v-on:keyup.13="submit">
Il est difficile de se souvenir de tous les keyCode. Vue.js 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 clé :
enter tab delete esc space up down left right1.0.8+ : prend en charge les alias de clé à une seule lettre. 1.0.17+ : Vous pouvez personnaliser les alias clés :
// 可以使用 @keyup.f1 Vue.directive('on').keyCodes.f1 = 112Pourquoi écouter les événements en HTML ?Vous remarquerez peut-être que cette méthode de surveillance des événements viole le le concept traditionnel de « séparation des préoccupations » est introduit. Ne vous inquiétez pas, puisque tous les gestionnaires d'événements et expressions Vue.js sont strictement liés au ViewModel de la vue actuelle, cela ne posera aucune difficulté de maintenance. En fait, utiliser
présente plusieurs avantages : v-on
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!