Vue : construire une application web (école d'ingénieur) · Chapitre 8 · Application directe du cours
Un compte à rebours
Cycle de vie et composables · niveau 1 (application)
Énoncé
Écrire un composant CompteARebours : sa prop secondes est la durée de réservation d'un panier ; il affiche « Panier réservé encore 3 s » en décomptant chaque seconde, puis « Réservation expirée ». Le minuteur s'arrête à zéro, et au démontage.
Corrigé
<script setup>
import { onMounted, onUnmounted, ref } from "vue";
const props = defineProps({ secondes: { type: Number, required: true } });
const reste = ref(props.secondes);
let minuteur = null;
function arreter() {
clearInterval(minuteur);
minuteur = null;
}
onMounted(() => {
minuteur = setInterval(() => {
reste.value -= 1;
console.log("reste", reste.value);
if (reste.value === 0) arreter();
}, 1000);
});
onUnmounted(arreter);
</script>
<template>
<p role="timer">
{{ reste > 0 ? `Panier réservé encore ${reste} s` : "Réservation expirée" }}
</p>
</template>
Le texte au chargement, la console, puis le texte final :
Panier réservé encore 3 s
reste 2
reste 1
reste 0
Réservation expirée
La fonction arreter sert deux fois : à zéro, et au démontage (si l'utilisateur quitte la page avant la fin). Le rôle timer indique aux lecteurs d'écran une zone qui change seule ; il n'impose pas d'annoncer chaque seconde, ce qui serait insupportable.
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.