Vue : construire une application web (école d'ingénieur) · Chapitre 5 · Application directe du cours
Noter un livre
Composants · niveau 2
Énoncé
Écrire un composant NoteEtoiles qui affiche cinq boutons « ★ » ou « ☆ » selon sa prop note (entier de 0 à 5), et émet noter avec la note choisie quand on clique sur un bouton. Chaque bouton doit être compréhensible par un lecteur d'écran (« Noter 3 sur 5 ») et indiquer s'il correspond à la note actuelle. Le parent affiche « Votre note : 4/5 » ou « Pas encore noté. ».
Corrigé
const { createApp, ref } = Vue;
const NoteEtoiles = {
template: "#modele-note-etoiles",
props: {
note: { type: Number, default: 0, validator: (n) => Number.isInteger(n) && n >= 0 && n <= 5 },
},
emits: ["noter"],
setup(props, { emit }) {
// Étoile pleine jusqu'à la note, vide au-delà
const etoile = (n) => (n <= props.note ? "★" : "☆");
return { emit, etoile };
},
};
createApp({
components: { NoteEtoiles },
setup() {
return { note: ref(0) };
},
}).mount("#app");
<div id="app">
<p>Votre note pour « Le Petit Prince » :</p>
<note-etoiles :note="note" @noter="note = $event"></note-etoiles>
<p role="status">{{ note === 0 ? "Pas encore noté." : `Votre note : ${note}/5` }}</p>
</div>
<template id="modele-note-etoiles">
<p class="etoiles">
<button v-for="n in 5" :key="n" type="button"
:aria-label="`Noter ${n} sur 5`" :aria-pressed="n === note"
@click="emit('noter', n)">{{ etoile(n) }}</button>
</p>
</template>
Après un clic sur le quatrième bouton :
Votre note pour « Le Petit Prince » :
★★★★☆
Votre note : 4/5

v-for="n in 5" parcourt les entiers de 1 à 5. Les étoiles ne sont pas lisibles par un lecteur d'écran, d'où aria-label ; aria-pressed vaut true pour le seul bouton de la note actuelle (le quatrième ici). Le composant ne modifie pas note : il émet noter, et le parent affecte la valeur reçue (la variable spéciale du gestionnaire en ligne). La petite fonction etoile évite d'écrire une comparaison <= dans le gabarit de la page, que le validateur HTML signale comme un caractère brut.
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.