Benutzerdefinierte Ereignisse für Komponenten
HTML-Elemente können Ereignisse auf der Grundlage von Benutzerinteraktionen auslösen. Mit Komponenten können Sie das Gleiche tun, indem Sie Ereignisse senden. Diese Ereignisse können von der übergeordneten Komponente ähnlich wie beim Hinzufügen von Code zum Warten auf ein Klick-Ereignis für eine Schaltfläche behandelt werden.
Registrieren von Ereignissen
Wenn Sie eine Komponente erstellen, registrieren Sie alle Ereignisse, die von der Komponente ausgegeben werden können, indem Sie sie im emits
-Feld in script
auflisten:
<!-- inside the component's vue file -->
<script>
export default {
name: 'Demo',
emits: ['userUpdated']
}
</script>
Senden von Ereignissen
Sie senden ein Ereignis mithilfe der $emit
-Funktion. Wenn Sie ein Ereignis senden möchten, das direkt von einem HTML-Steuerelement ausgelöst wurde, können Sie diesen Vorgang inline ausführen. Beachten Sie, wie Sie das userUpdated
-Ereignis senden können, indem Sie den click
-Ereignishandler für eine Schaltfläche registrieren:
<!-- inside the component's vue file -->
<template>
<button @click="$emit('userUpdated')">Save user</button>
</template>
Hinweis
Sie verwenden die Verknüpfung für @click
, was den typischen Weg zum Verbinden von Ereignishandlern in Vue darstellt.
Manchmal müssen Sie weitere Schritte ausführen, bevor Sie das Ereignis senden können. Wenn Ihre Komponente den Wert vor der Rückgabe aktualisierter Informationen in einer Datenbank speichern muss, können Sie dazu eine Methode hinzufügen. In der Methode können Sie this.$emit
verwenden, um das Ereignis wie zuvor auszulösen:
<!-- inside the component's vue file -->
<template>
<button @click="saveUser">Save user</button>
</template>
<script>
export default {
name: 'UserDialog',
emits: ['userUpdated'],
methods: {
saveUser() {
// perform other operations
this.$emit('userUpdated'); // emits event
}
}
}
</script>
Senden von Ereignissen mit Daten
Möglicherweise muss die Komponente Daten über Ereignisse an das übergeordnete Element zurückgeben. Sie können beliebige Daten zurückgeben, indem Sie weitere Parameter an $emit
übergeben. Wenn Sie angeben möchten, dass das Update erfolgreich durch true
zurückgegeben wurde, können Sie den Befehl wie folgt aktualisieren:
<button @click="$emit('userUpdated', true)">Save user</button>
Oder Sie können eine Methode verwenden:
methods: {
saveUser() {
// perform other operations
this.$emit('userUpdated', true); // emits event
}
}
Auf Ereignisse lauschen
Das Warten auf ein Ereignis, das von einer Komponente gesendet wird, ähnelt dem Warten auf Ereignisse, die von normalen HTML-Steuerelementen ausgelöst werden. In der Regel erstellen Sie in der übergeordneten Komponente eine Methode und verbinden die Methode dann mit dem Ereignis, indem Sie die gleiche @<event-name>
-Syntax wie für @click
oder andere Ereignisse verwenden. Wenn das Ereignis Daten zurückgibt, werden diese als Parameter an die Funktion übermittelt.
Zum Hinzufügen eines Ereignishandlers für das userUpdated
-Ereignis, das Sie zuvor erstellt haben, können Sie den folgenden Code verwenden. Beachten Sie, dass Vue.js Namen von camelCase in kebab-case konvertiert.
<template>
<user-dialog @user-updated="handleUserUpdated"></user-dialog>
</template>
<script>
import UserDialog from './UserDialog.vue';
export default {
methods: {
handleUserUpdated(success) {
if (success) {
alert('It worked!!');
} else {
alert('Something went wrong');
}
}
},
components: {
UserDialog
}
}