Event-Handling
Verzeichnis
Hörereignisse
Sie können den Befehl v-on
verwenden, um das DOM zu überwachen Ereignis ausführen und bei Auslösung JavaScript-Code ausführen.
Beispiel:
<div id="example-1"> <button v-on:click="counter += 1">Add 1</button> <p>The button above has been clicked {{ counter }} times.</p> </div>
var example1 = new Vue({ el: '#example-1', data: { counter: 0 } })
Ergebnis:
Ereignisverarbeitungsmethoden
Viele Ereignisverarbeitungslogiken sind jedoch komplizierter, also verwenden Sie sie einfach Es ist nicht möglich, JavaScript-Code innerhalb der v-on
-Direktive zu schreiben. Daher kann v-on
auch den Namen einer aufzurufenden Methode erhalten.
Beispiel:
<div id="example-2"> <!-- `greet` 是在下面定义的方法名 --> <button v-on:click="greet">Greet</button> </div>
var example2 = new Vue({ el: '#example-2', data: { name: 'Vue.js' }, // 在 `methods` 对象中定义方法 methods: { greet: function (event) { // `this` 在方法里指向当前 Vue 实例 alert('Hello ' + this.name + '!') // `event` 是原生 DOM 事件 if (event) { alert(event.target.tagName) } } } }) // 也可以用 JavaScript 直接调用方法 example2.greet() // => 'Hello Vue.js!'
Ergebnis:
Methoden in Inline-Handlern
Zusätzlich zur direkten Bindung an eine Methode kann sie auch inline sein Aufrufende Methode in JavaScript-Anweisung:
<div id="example-3"> <button v-on:click="say('hi')">Say hi</button> <button v-on:click="say('what')">Say what</button> </div>
new Vue({ el: '#example-3', methods: { say: function (message) { alert(message) } } })
Ergebnis:
Manchmal ist es auch notwendig, auf den Inline-Anweisungsprozessor Raw zuzugreifen DOM-Ereignisse. Sie können es mit der speziellen Variablen $event
an die Methode übergeben:
<button v-on:click="warn('Form cannot be submitted yet.', $event)"> Submit </button>
// ... methods: { warn: function (message, event) { // 现在我们可以访问原生事件对象 if (event) event.preventDefault() alert(message) } }
Ereignismodifikatoren
Aufruf event.preventDefault()
in einem Event-Handler oder event.stopPropagation()
ist eine sehr häufige Anforderung. Obwohl wir dies leicht in Methoden implementieren können, ist es besser, Methoden mit reiner Datenlogik zu haben, anstatt sich mit DOM-Ereignisdetails zu befassen.
Um dieses Problem zu lösen, stellt Vue.js den v-on
Ereignismodifikator für bereit. Wie bereits erwähnt, werden Modifikatoren durch Anweisungssuffixe dargestellt, die mit einem Punkt beginnen.
.stop
.prevent
.capture
.self
.once
.passive
<!-- 阻止单击事件继续传播 --> <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> <!-- 只当在 event.target 是当前元素自身时触发处理函数 --> <!-- 即事件不是从内部元素触发的 --> <div v-on:click.self="doThat">...</div>
Bei der Verwendung von Modifikatoren ist die Reihenfolge des entsprechenden Codes wichtig; werden in der gleichen Reihenfolge generiert. Daher blockiert die Verwendung von
v-on:click.prevent.self
alle Klicks auf , währendv-on:click.self.prevent
nur Klicks auf das Element selbst blockiert.
2.1.4 Neu
<!-- 点击事件将只会触发一次 --> <a v-on:click.once="doThis"></a>
Im Gegensatz zu anderen Modifikatoren, die nur bei nativen DOM-Ereignissen funktionieren können, kann der Modifikator .once
auch in benutzerdefinierten <🎜 verwendet werden > Komponentenereignisse . Wenn Sie die Dokumentation zu Ihren Komponenten nicht gelesen haben, machen Sie sich jetzt keine Sorgen.
2.3.0 NeuVue stellt auch den
-Modifikator bereit, der der -Option addEventListener
in passive
entspricht. .passive
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 --> <!-- 而不会等待 `onScroll` 完成 --> <!-- 这其中包含 `event.preventDefault()` 的情况 --> <div v-on:scroll.passive="onScroll">...</div>Der Modifikator
kann insbesondere die Leistung auf Mobilgeräten verbessern. .passive
Verwenden Sieund
.passive
nicht zusammen, da.prevent
ignoriert wird und der Browser möglicherweise eine Warnung anzeigt. Denken Sie daran:.prevent
teilt dem Browser mit, dass Sie das Standardverhalten des Ereignisses nicht blockieren möchten..passive
Tastenmodifikatoren
Wenn wir auf Tastaturereignisse achten, brauchen wir oft um detaillierte Schlüssel zu überprüfen. Vue ermöglicht das Hinzufügen von Tastenmodifikatoren zu
beim Abhören von Tastaturereignissen: v-on
<!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` --> <input v-on:keyup.enter="submit">Sie können jeden gültigen Tastennamen, der durch
KeyboardEvent.key
angezeigt wird, direkt in Kebab-Case als Modifikationssymbol umwandeln.
<input v-on:keyup.page-down="onPageDown">Im obigen Beispiel wird der Handler nur aufgerufen, wenn
gleich $event.key
ist. PageDown
Schlüsselcode
Die Verwendung der FunktionEreignisnutzung
keyCode
wurde veraltet und wird möglicherweise von den neuesten Browsern nicht unterstützt.
ist ebenfalls zulässig: keyCode
<input v-on:keyup.13="submit">Um bei Bedarf ältere Browser zu unterstützen, stellt Vue Aliase für die am häufigsten verwendeten Schlüsselcodes bereit:
.enter
.tab
.delete
(Erfasst die Tasten „Löschen“ und „Rücktaste“).esc
.space
.up
.down
.left
.right
Es gibt einige Tasten (
.esc
und alle Pfeiltasten), die in IE9 einen anderenkey
Wert haben Wenn Sie IE9 unterstützen möchten, sollten diese integrierten Aliase bevorzugt werden.
Sie können auch global übergeben config.keyCodes
ObjektBenutzerdefinierter Schlüsselmodifikator-Alias:
// 可以使用 `v-on:keyup.f1` Vue.config.keyCodes.f1 = 112
Systemmodifikatorschlüssel
2.1.0 Neu
Mit den folgenden Modifikatoren können Sie einen Listener implementieren, der nur dann Maus- oder Tastaturereignisse auslöst, wenn die entsprechende Taste gedrückt wird.
.ctrl
.alt
.shift
.meta
Hinweis: Auf der Mac-Systemtastatur entspricht Meta der Befehlstaste (?). Auf der Windows-Systemtastatur entspricht Meta der Windows-Logo-Taste (?). Auf Sun-Betriebssystemtastaturen entspricht Meta der durchgezogenen Gem-Taste (◆). Auf bestimmten anderen Tastaturen, insbesondere denen der MIT- und Lisp-Maschinen und ihren Nachfolgern, wie der Knight-Tastatur und der Space-Cadet-Tastatur, ist Meta als „META“ gekennzeichnet. Auf der Symbolik-Tastatur ist Meta als „META“ oder „Meta“ gekennzeichnet.
Zum Beispiel:
<!-- Alt + C --> <input @keyup.alt.67="clear"> <!-- Ctrl + Click --> <div @click.ctrl="doSomething">Do something</div>
Bitte beachten Sie, dass sich Zusatztasten von normalen Tasten unterscheiden, wenn sie zusammen mit dem Ereignis
keyup
verwendet werden gedrückt werden, wenn das Ereignis ausgelöst wird. Mit anderen Worten:ctrl
kann nur ausgelöst werden, indem andere Tasten losgelassen werden, währendkeyup.ctrl
gedrückt gehalten wird. Und durch einfaches Loslassen vonctrl
wird das Ereignis nicht ausgelöst. Wenn Sie dieses Verhalten wünschen, verwenden Sie stattdessenctrl
fürkeyCode
:keyup.17
.
.exact
.exact
2.5.0 Mit den neuen Modifikatoren .exact
können Sie Ereignisse steuern, die durch eine präzise Kombination von Systemmodifikatoren ausgelöst werden.
<!-- 即使 Alt 或 Shift 被一同按下时也会触发 --> <button @click.ctrl="onClick">A</button> <!-- 有且只有 Ctrl 被按下的时候才触发 --> <button @click.ctrl.exact="onCtrlClick">A</button> <!-- 没有任何系统修饰符被按下的时候才触发 --> <button @click.exact="onClick">A</button>Maustastenmodifikator
- 2.2.0 Neu hinzugefügt
<🎜><🎜><🎜>.left
.right
.middle
Diese Modifikatoren beschränken die Handlerfunktion darauf, nur auf zu reagieren bestimmte Maustasten.
Warum auf Ereignisse in HTML achten?
Möglicherweise fällt Ihnen diese Art von Ereignis auf Der Zuhöreransatz steht im Widerspruch zur langjährigen Tradition der Interessenstrennung. Aber keine Sorge, da alle Vue.js-Ereignishandler und -Ausdrücke strikt an das ViewModel der aktuellen Ansicht gebunden sind, verursacht dies keine Wartungsschwierigkeiten. Tatsächlich hat die Verwendung von v-on
mehrere Vorteile:
1. Sie können die entsprechende Methode leicht im JavaScript-Code finden, indem Sie die HTML-Vorlage scannen.
2. Da Sie Ereignisse in JavaScript nicht manuell binden müssen, kann Ihr ViewModel-Code eine sehr reine Logik sein, vollständig vom DOM entkoppelt und einfacher zu testen.
3. Wenn ein ViewModel zerstört wird, werden alle Event-Handler automatisch gelöscht. Sie müssen sich keine Gedanken über die Reinigung machen.