Vue : construire une application web (école d'ingénieur) · Chapitre 8 · Application directe du cours
La fiche d'un livre
Cycle de vie et composables · niveau 2
Énoncé
Une liste déroulante permet de choisir un livre par son ISBN ; une des options est un ISBN inconnu (9780000000000). Avec useFetch, afficher la fiche du livre choisi (/api/livres/ISBN), un message pendant le chargement, et un message d'erreur si le livre n'existe pas.
Corrigé
<script setup>
import { ref } from "vue";
import { useFetch } from "../composables/useFetch.js";
const isbn = ref("9782956300014");
const { donnees: livre, erreur, chargement } = useFetch(() => `/api/livres/${isbn.value}`);
</script>
<p>
<label for="isbn">Livre</label>
<select
id="isbn"
v-model="isbn"
>
<option value="9782956300014">
Programmation Java
</option>
<option value="9782956300052">
Le Petit Prince
</option>
<option value="9780000000000">
(ISBN inconnu)
</option>
</select>
</p>
<p
v-if="chargement"
aria-live="polite"
>
Chargement…
</p>
<p
v-else-if="erreur"
role="alert"
>
Fiche indisponible. {{ erreur }}
</p>
<article v-else-if="livre">
<h2>{{ livre.titre }}</h2>
<p>{{ livre.auteur }} — {{ livre.prix }} € — {{ livre.stock }} en stock</p>
</article>
Pour « Programmation Java », « Le Petit Prince », puis l'ISBN inconnu, la fiche affiche successivement :
Programmation Java / I. Alame — 32 € — 12 en stock
Le Petit Prince / A. de Saint-Exupéry — 8.5 € — 25 en stock
Fiche indisponible. Le serveur a répondu 404.
(la console du navigateur signale aussi la réponse 404). L'adresse est une fonction : useFetch la réévalue quand isbn change. Écrire useFetch("/api/livres/" + isbn.value) figerait l'adresse du premier livre. Le prix s'affiche « 8.5 € » : il faudrait la fonction prixEnEuros de la Librairie.
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.