Les démonstrations de ce TD se basent sur les sources disponibles ci-dessous :
Attention, seul le répertoire src
est dans l'archive. Il faut donc créer un projet avec vue-cli
et remplacer son répertoire src
.
Comme vu dans le TD consacré à Vuetify, le composant v-dialog
permet d'afficher au centre de la page du navigateur une boîte de dialogue. On peut notamment fixer sa largeur et son contenu librement.
En revanche, cette boîte est forcément reliée au composant père où on l'instancie. Ce n'est donc pas une fenêtre applicative, au sens des dialogues en Java.
Cela implique que ce qui permet à la boîte de s'afficher/disparaître doit se trouver dans ce composant.
Il faut notamment une variable booléenne qui permet de spécifier si la boîte de dialogue est visible ou non et faire un data-binding dessus.
On peut ensuite créer un élément cliquable (par ex., un bouton) qui va faire passer cette variable à true
afin de montrer le dialogue, et celui-ci contient d'autres boutons permettant de mettre la variable à false
et ainsi masquer le dialogue.
Généralement, ce masquage est fait grâce à une fonction qui va faire un traitement particulier après la fermeture du dialogue, selon le bouton que l'on a cliqué pour fermer.
Ce principe est simple mais il devient fastidieux à mettre en place lorsqu'un composant peut afficher différents dialogues avec la même structure mais avec différents traitements selon le dialogue et le bouton cliqué.
Prenons le cas très courant de dialogues avec un titre, un texte et deux boutons : ok
& cancel
.
Supposons un composant qui, selon les interactions de l'utilisateur, va afficher deux types de dialogue avec cette structure mais un titre et texte différent. Qui plus est, le traitement à faire après clic dépend du bouton et du dialogue, soit 4 possibilités de traitement, représentées par 4 fonctions dans methods
.
props
. Cela implique une méthode qui met à jour ces props
en fonction de la version du dialogue à afficher, une variable supplémentaire qui stocke cette version, et enfin deux fonctions, une pour chaque type de bouton (ok
+ cancel
) qui vont appeler une des 4 fonctions de traitement par rapport à la version du dialogue (cf. démo).Dans les deux cas, c'est du code à écrire, qui va un peu à l'encontre de la philosophie de réutilisation des composants.
Si on regarde ce qui se fait dans d'autres langages, on constate qu'il est possible de créer des dialogues "à la volée", qui bloquent l'exécution tant qu'ils sont visibles, et qui renvoient une valeur différente selon le bouton cliqué.