Adloun

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 Java

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →