Events und Data Flow

Vue.js Dokumentation
Vue.js Dokumentation

One-Way Data Flow

In Vue «fliessen» Daten zwischen Eltern- und Kindkomponenten immer nur in eine Richtung: abwärts («Parent to child»).

Damit ist gemeint, dass Werte nur via Properties von einer Elternkomponente an ihre Kinder übergeben werden können.

Die Kindkomponenten können diese Werte nicht direkt verändern (readonly). Wenn ein Kind die Werte ändern möchte, muss dies über ein Event an die Elternkomponente signalisiert werden.

Die Elternkomponente achtet auf Events, ändert die gewünschten Werte und gibt die aktualisierten Werte via Props wieder an die Kinder weiter.

Das «Kind» signalisiert via setFontSize Event, dass fontSize auf 14 gesetzt werden soll.

Events definieren und auslösen

Vue.js Dokumentation

Eine Komponente kann beliebige Events definieren. Dazu kann die defineEmits Funktion verwendet werden.

Über die $emit Funktion in Templates kann der Event an Elternkomponenten signalisiert werden.

defineEmits

defineEmits muss nicht zwingend verwendet werden. Vue kann durch defineEmits aber einige Optimierungen bei der Event-Verarbeitung vornehmen.

Es lohnt sich also, wenn du dir angewöhnst, defineEmits immer zu verwenden.

Events abfangen

Eine Elternkomponente kann über die @-Syntax einen Event abfangen und Code direkt «inline» ausführen:

Funktionen aufrufen

Es ist möglich, eine Funktion als Event-Listener aufzurufen:

Parameter übergeben

Ein Event kann optional auch ein Parameter beinhalten. Dieser Parameter kann als zweites Argument in der $emit Funktion übergeben werden.

Eine spezielle $event Variable beinhaltet den übergebenen Wert im Event-Listener:

Wenn als Event-Listener eine Funktion angegeben wird, wird $event automatisch als erstes Argument an diese Funktion übergeben.

Events in <script setup> auslösen

Der defineEmits Aufruf gibt eine Funktion zurück, die verwendet werden kann um einen Event direkt im <script setup> Bereich einer Komponente auszulösen.