9. Projekt [vuejs-07]: Ereignisausbreitung in der Komponentenhierarchie
Die Verzeichnisstruktur des Projekts sieht wie folgt aus:

9.1. Das Hauptskript [main.js]
Das Hauptskript [main.js] bleibt unverändert.
9.2. Die Hauptkomponente [App]
Der Code für die Komponente [App] lautet wie folgt:
<template>
<div class="container">
<b-card>
<b-alert show variant="success" align="center">
<h4>[vuejs-07] : remontée d'événements dans la hiérarchie des composants</h4>
</b-alert>
<Component1 />
</b-card>
</div>
</template>
<script>
import Component1 from './components/Component1'
export default {
name: "app",
components: {
Component1
}
};
</script>
Die Komponente [App] verwendet eine neue Komponente [Component1] (Zeilen 7, 13, 17).
9.3. Die Komponente [Component11]
Der Code für die Komponente [Component11] lautet wie folgt:
<template>
<b-button @click="createEvent">Créer un événement</b-button>
</template>
<!-- script -->
<script>
export default {
name: "component11",
// component methods
methods: {
// event management [click] on button
createEvent() {
// we send an event coupled to data
this.$emit("someEvent", { x: 2, y: 4 })
}
}
};
</script>
Kommentare
- Zeilen 1–3: Die Komponente [Component11] enthält nur eine Schaltfläche, auf die geklickt werden kann. Beim Klicken wird die Methode [createEvent] in den Zeilen 11–14 ausgeführt;
- Zeile 13: Jede [View]-Instanz verfügt über eine [$emit]-Methode, mit der ein Ereignis ausgelöst werden kann:
- Der erste Parameter ist der Name des ausgelösten Ereignisses;
- der zweite Parameter sind die Daten, die diesem Ereignis zugeordnet werden sollen;
- Das ausgelöste Ereignis wandert die Hierarchie der Komponenten hinauf, die die Komponente [Component11] enthalten. Es wandert so lange die Hierarchie hinauf, bis es eine Komponente findet, die es verarbeiten kann. Dieser Prozess beginnt mit der übergeordneten Komponente von [Component11];
9.4. Die Komponente [Component1]
Der Code für die Komponente [Component1] lautet wie folgt:
<template>
<b-row>
<!-- le composant qui lance l'événement -->
<b-col cols="2">
<Component11 @someEvent="doSomething" />
</b-col>
<!-- message affiché par la méthode de gestion de l'évt-->
<b-col>
<b-alert show
variant="warning"
v-if="showMsg">Evénement [someEvent] intercepté par [Component1]. Valeur reçue={{data}}</b-alert>
</b-col>
</b-row>
</template>
<script>
import Component11 from "./Component11";
export default {
name: "component1",
// composants
components: {
Component11
},
// état du composant
data() {
return {
data: "",
showMsg: false
};
},
// méthodes de gestion des évts
methods: {
doSomething(data) {
// data est l'objet qui a été associé à l'évt [someEvent]
this.data = data;
// affiche l'alerte
this.showMsg = true;
}
}
};
</script>
Visuelle Darstellung


Kommentare
- Zeile 5: [Component1] ist der übergeordnete Bestandteil von [Component11] und kann daher auf Ereignisse „hören“ (so lautet der Fachbegriff), die von dieser Komponente ausgelöst werden. Wir wissen, dass [Component11] das Ereignis [someEvent] auslösen kann. Das Attribut [@someEvent="doSomething"] gibt an, dass bei Auftreten des von [Component11] ausgelösten Ereignisses [someEvent] die Methode [doSomething] in Zeile 33 ausgeführt werden muss;
- Zeilen 9–11: Eine von der Methode [doSomething] angezeigte Meldung. Ihre Anzeige wird durch den booleschen Wert [showMsg] in Zeile 28 gesteuert. Die Meldung zeigt das Attribut [data] aus Zeile 27 an;
- Zeile 33: Die Methode [doSomething], die ausgeführt wird, wenn das Ereignis [someEvent] eintritt (Zeile 5), erhält die mit diesem Ereignis verbundenen [data] als Parameter. Dieser Parameter wird dem Attribut [data] in Zeile 27 zugewiesen, das in Zeile 11 angezeigt wird;
- Zeile 37: Wir setzen das Attribut [showMsg] auf [true], um die Warnmeldung aus den Zeilen 9–11 anzuzeigen;
9.5. Ausführen des Projekts
