Vue : construire une application web (école d'ingénieur) · Chapitre 5 · Exercice de TD
Remonter sur deux niveaux
Composants · niveau 2
Énoncé
Une application affiche un composant ListeLivres, qui affiche pour chaque livre un composant CarteMini avec un bouton « Ajouter ». Le panier est dans l'application. Écrire les deux composants pour qu'un clic sur « Ajouter » ajoute le titre du livre au panier, sans que les composants modifient le panier eux-mêmes.
Corrigé
const { createApp, ref } = Vue;
const CarteMini = {
template: "#modele-carte-mini",
props: { livre: { type: Object, required: true } },
emits: ["ajouter"],
setup(props, { emit }) {
return { emit };
},
};
// La liste ne fait que RELAYER l'événement de la carte vers son propre parent.
const ListeLivres = {
template: "#modele-liste-livres",
components: { CarteMini },
props: { livres: { type: Array, required: true } },
emits: ["ajouter"],
setup(props, { emit }) {
return { emit };
},
};
createApp({
components: { ListeLivres },
setup() {
const livres = [
{ isbn: "9782956300014", titre: "Programmation Java" },
{ isbn: "9782956300052", titre: "Le Petit Prince" },
];
return { livres, panier: ref([]) };
},
}).mount("#app");
<div id="app">
<p>Panier : {{ panier.join(", ") || "vide" }}</p>
<liste-livres :livres="livres" @ajouter="panier.push($event.titre)"></liste-livres>
</div>
<template id="modele-liste-livres">
<ul>
<li v-for="livre in livres" :key="livre.isbn">
<carte-mini :livre="livre" @ajouter="emit('ajouter', $event)"></carte-mini>
</li>
</ul>
</template>
Après un clic sur « Ajouter » pour « Le Petit Prince » puis pour « Programmation Java », la première ligne de la page est
Panier : Le Petit Prince, Programmation Java
ListeLivres écoute l'événement de chaque carte et émet aussitôt le sien, avec le même livre. Ce relais est indispensable, car un événement de composant n'atteint que le parent direct ; mais il oblige ListeLivres à connaître un événement dont elle ne fait rien. Avec trois ou quatre niveaux, ce serait pénible : le chapitre 7 montre comment s'en passer.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.