Vue : construire une application web (école d'ingénieur) · Chapitre 7 · Exercice de TD
Supprimer le relais
Communication entre composants · niveau 1 (application)
Énoncé
Reprendre l'exercice 5.6 (une liste qui relaie l'événement de ses cartes) avec des composants monofichiers et provide/inject, de sorte que la liste ignore tout de l'ajout au panier.
Corrigé
<script setup>
import { provide, ref } from "vue";
import ListeLivres from "./ListeLivres.vue";
import { cleAjouter } from "./cles.js";
const LIVRES = [
{ isbn: "9782956300014", titre: "Programmation Java" },
{ isbn: "9782956300052", titre: "Le Petit Prince" },
];
const panier = ref([]);
provide(cleAjouter, (livre) => panier.value.push(livre.titre));
</script>
<template>
<p>Panier : {{ panier.join(", ") || "vide" }}</p>
<ListeLivres :livres="LIVRES" />
</template>
<script setup>
import CarteMini from "./CarteMini.vue";
// Plus de relais : la liste ne connaît même plus l'événement « ajouter ».
defineProps({ livres: { type: Array, required: true } });
</script>
<template>
<ul>
<li
v-for="livre in livres"
:key="livre.isbn"
>
<CarteMini :livre="livre" />
</li>
</ul>
</template>
<script setup>
import { inject } from "vue";
import { cleAjouter } from "./cles.js";
defineProps({ livre: { type: Object, required: true } });
const ajouter = inject(cleAjouter);
</script>
<template>
<span>{{ livre.titre }}</span>
<button
type="button"
@click="ajouter(livre)"
>
Ajouter
</button>
</template>
Après un clic sur « Ajouter » pour « Le Petit Prince » puis pour « Programmation Java » :
Panier : Le Petit Prince, Programmation Java100 % 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.