Vue : construire une application web (école d'ingénieur) · Chapitre 10 · Application directe du cours
Ne pas dépasser le stock
Pinia : un état partagé par toute l'application · niveau 2
Énoncé
Modifier l'action ajouter du panier pour qu'elle refuse un exemplaire de plus que le stock du livre (le livre reçu en argument a un champ stock). Elle renverra true si l'ajout a eu lieu, false sinon, et l'annonce expliquera le refus. Essayer trois ajouts d'un livre dont le stock est 2, puis un livre épuisé.
Corrigé
/** Ajoute un exemplaire si le stock le permet ; renvoie true si c'est fait. */
function ajouter(livre) {
const ligne = lignes.value.find((l) => l.isbn === livre.isbn);
const dejaPris = ligne?.quantite ?? 0;
if (dejaPris >= livre.stock) {
annonce.value = livre.stock === 0
? `« ${livre.titre} » est épuisé.`
: `Plus d’exemplaire disponible : vous avez déjà les ${livre.stock} de « ${livre.titre} ».`;
return false;
}
if (ligne) ligne.quantite += 1;
else lignes.value.push({ isbn: livre.isbn, titre: livre.titre, prix: livre.prix, quantite: 1 });
annonce.value = `« ${livre.titre} » ajouté au panier.`;
return true;
}
Valeur renvoyée, nombre d'articles et annonce après chaque appel :
true | 1 | « Introduction à l’algorithmique » ajouté au panier.
true | 2 | « Introduction à l’algorithmique » ajouté au panier.
false | 2 | Plus d’exemplaire disponible : vous avez déjà les 2 de « Introduction à l’algorithmique ».
false | 2 | « Physique générale » est épuisé.
La règle est écrite une seule fois, dans l'action : la carte du catalogue, la fiche du livre et le champ de quantité du panier en bénéficient tous. La valeur renvoyée permet à un composant de réagir (par exemple garder le focus sur le bouton et laisser l'annonce parler).
100 % gratuit
La suite du chapitre est sur Adloun
- 10 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.