Adloun

Vue : construire une application web (école d'ingénieur) · Chapitre 7 · Exercice de TD

Confirmer avant de vider

Communication entre composants · niveau 2

Énoncé

Avec le composant FenetreModale de la Librairie, ajouter un bouton « Vider le panier » qui ouvre une fenêtre « Vider le panier ? » avec un bouton « Oui, vider » dans l'emplacement actions. Où est le focus à l'ouverture ?

Corrigé


<script setup>
import { ref } from "vue";
import FenetreModale from "./FenetreModale.vue";

const lignes = ref(["Programmation Java", "Le Petit Prince"]);
const confirmer = ref(false);

function vider() {
  lignes.value = [];
  confirmer.value = false;
}
</script>

<template>
  <p>Panier : {{ lignes.join(", ") || "vide" }}</p>
  <button
    type="button"
    :disabled="lignes.length === 0"
    @click="confirmer = true"
  >
    Vider le panier
  </button>
  <FenetreModale v-model:ouverte="confirmer">
    <template #titre>
      Vider le panier ?
    </template>
    <p>Les {{ lignes.length }} livres du panier seront retirés.</p>
    <template #actions>
      <button
        type="button"
        class="bouton"
        @click="vider"
      >
        Oui, vider
      </button>
    </template>
  </FenetreModale>
</template>

Illustration

À l'ouverture, showModal() place le focus sur le premier élément focalisable de la fenêtre : le bouton « Oui, vider ». Après un clic sur ce bouton :


Panier : vide | dialogue ouvert : false | bouton désactivé : true

(La capture est faite sans le focus, pour ne pas montrer son contour.) Pour une action destructrice, on préférerait que le focus soit sur « Fermer » : l'attribut autofocus sur ce bouton suffit, car showModal() le respecte.

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 →