Exercice 09 - Composants Vue.js et leurs interactions
Table des matières
Mise en situation
Vous avez compris le pourquoi et la raison d'être des composants Vue.js, maintenant il est temps de les mettre en pratique avec un exercice pratique!
Vous avez deux parties à faire pour cet exercice, ils seront remis dans deux répertoires distincts
Modalités
- Exercice seul ou en équipe de deux
- Réaliser durant le cours
- Durée approximative le reste du cours
- Remettre le tout sur Léa dans Exercice 09 pour le prochain cours!
Partie 01 À faire (étapes)
Pour débuter cette partie:
- Refaite une installation complète Vue.js avec Typescript à l'aide de vite dans un dossier exer09
- le nom de cette app sera: part01-dnd
Dans le terminal, on installe les dépendances et on lance le serveur:
npm install
npm run dev
En utilisant votre exercice 04, vous avez deux tâches:
- Intégration du code existant dans un projet Vue.js
- Découpage en composants du formulaire
Intégration du code existant dans un projet Vue.js
- Changer le title de la page pour Exercice 09
- Le code JavaScript index.ts de l'exercice 04 doit être transférer dans App.vue
- les importations de bootstrap peuvent rester comme dans App.vue (vérifier style.css)
- les autres fichiers ,ts peuvent être copié de l'exercice 04 jusqu'à l'exercice 09
- les importations devraient tous fonctionner
- Le code HTML du formulaire doit être copié dans la zone template de App.vue
- il y aura une erreur de html, à vous de la corriger ;)
- Vous pouvez supprimer les lignes suivantes:
document.querySelector<HTMLDivElement>("#app")!.innerHTML = getHtmlForm(); import { getHtmlForm } from "./htmlForm.ts";
NOTE: la dernière dépend de si vous prenez ma solution!
- Le code HTML de l'entête et du footer doit être intégré dans des composants. exemple Footer.vue / Header.vue
- Le CSS de l'exercice 04 doit être transférer et remplacer celui présent dans style.css (dé-commenter la ligne dans main.ts)
- Penser à l'endroit ou mettre le code HTML du formulaire (indice: App.vue) c'est ce html qui sera injecté dans la div#app!
createApp(App).mount('#app') - Intégrer l'image de l'entête de l'exercice 04
- Une erreur Javascript devrait se produire car l'élément HTML n'existe pas!
- Les lignes suivantes doivent être effacées:
const CREATE_CHARACTER: HTMLElement | null = document.getElementById("creerPersonnage"); CREATE_CHARACTER!.addEventListener("click", submitForm);
- Les lignes suivantes doivent être effacées:
- La fonction submitForm doit être envoyé @click sur le bouton en Vue.js
- Votre projet devrait fonctionner à partir de ce moment! (npm run dev)
Découpage en composants du formulaire
Maintenant le cœur de l'exercice! Vous devez créer des composants qui permettront de séparer votre formulaire en composants!
- Faites du ménages dans les fichiers de départs
- Faites un dossier css pour les styles, un scripts les scripts TS etc, car ça commence à être lourd.
- Faites différents composants pour les différentes zones
- Les zones de messages d'erreurs
- Les grandes sections du formulaire
- Etc.
- Apportez toute amélioration que vous jugez intéressante, à partir de ce point vous êtes pas mal connaisseur! ;)
- EXPERT: Les validations sont encore en Typescript, ils doivent être convertis en VueJs et en utilisant l'API composition
- FINALEMENT, faites un npm run build pour voir si votre projet se construit bien!
Partie 02 - À faire (étapes)
Introduction
Pour débuter cette partie:
- Refaite une installation complète Vue.js avec Typescript à l'aide de vite dans le même dossier exer09
- le nom de cette app sera: part02-pcbuilding
L’application vous permettra de choisir les composants d’un PC (processeur, carte mère, RAM, etc.) et d’afficher un récapitulatif du build avec un prix total.
Objectifs de cette partie
-
Configurer un projet Vue 3 avec TypeScript\
Utiliser Vite pour démarrer rapidement un projet avec support TypeScript. -
Créer une application de configuration de PC personnalisé
- Définir des interfaces pour représenter des catégories de composants et leurs options.
- Permettre à l’utilisateur de sélectionner une option par catégorie.
- Afficher un récapitulatif du build avec les choix effectués et le total.
-
Utiliser les notions de base de Vue 3
- Directives de template (
v-if
,v-for
,v-model
) - Gestion des composants (props, émission d’événements)
- Réactivité avec
ref
,computed
etwatch
- Hooks du cycle de vie (
onMounted
)
- Directives de template (
-
Intégrer TypeScript dans vos composants
- Déclarer des types et interfaces pour garantir la cohérence des données
- Utiliser
<script setup lang="ts">
et la Composition API avec typage
-
Installer et utiliser Bootstrap 5 pour l’interface utilisateur
- Installer Bootstrap 5 dans le projet Vue.js
- Utiliser les classes Bootstrap pour structurer l’interface et améliorer l’expérience utilisateur
- S’assurer que l’interface soit réactive et ergonomique
Structure du projet
N'oubliez pas de bien structurer votre projet:
- Faire le ménage des fichiers non nécessaires
- Dossier scripts pour tous les fichiers .ts
- Dossier css pour tous les fichiers .css
- Etc.!
Récits utilisateurs
1. En tant qu’utilisateur, je veux pouvoir sélectionner les composants de mon PC
- L’utilisateur doit pouvoir choisir parmi plusieurs options pour chaque catégorie (CPU, RAM, GPU, etc.).
- Une liste claire et intuitive doit être affichée avec des descriptions et des prix.
- Le choix sélectionné doit être mis en évidence.
2. En tant qu’utilisateur, je veux voir le récapitulatif de ma configuration
- Une section dédiée affichera les composants choisis avec leurs prix respectifs.
- Le total doit être calculé dynamiquement en fonction des choix effectués.
3. En tant qu’utilisateur, je veux modifier mes choix facilement
- Un utilisateur doit pouvoir revenir sur ses choix et sélectionner d’autres composants sans avoir à recommencer la configuration.
- Un feedback visuel (comme un changement de couleur ou une animation) doit indiquer qu’un choix a été mis à jour.
4. En tant qu’utilisateur, je veux un design moderne et clair
- L’application doit être ergonomique et responsive grâce à Bootstrap 5.
- Une interface propre et bien organisée avec une bonne hiérarchie des informations doit être mise en place.
5. EXPERT: En tant qu’utilisateur, je veux pouvoir enregistrer ma configuration
Si vous voulez un peu de défi ce récit est pour vous ;)
- Une option d’enregistrement temporaire en local (ex : localStorage) doit être disponible.
- Lorsque l’utilisateur revient sur l’application, sa configuration précédente doit être restaurée.
TODO
1. Introduction et configuration du projet
Inclure les étapes pour initialiser un projet Vue avec Vite et TypeScript, ainsi que l’installation de Bootstrap 5
2. Création des modèles de données
Définir des interfaces pour représenter les composants et options disponibles
3. Mise en place de l’App.vue
Structurer l’application principale et intégrer un composant pour la configuration du PC
4. Création du composant ComputerBuilder
Gérer les catégories de composants, permettre la sélection et afficher un récapitulatif
5. Création du composant ComponentSelector
Afficher une liste déroulante ou des boutons pour sélectionner une option dans une catégorie. Fouillez pour des composants Bootsrap existants!
6. Utilisation de computed et de watch
Implémenter des propriétés calculées et surveiller les changements de configuration (Exemple calcul de total et taxes)
7. Cycle de vie et améliorations
Charger une configuration de PC existante au démarrage avec un hook comme onMounted
8. Tests et finalisation
Tester l’application pour s’assurer du bon fonctionnement des sélections et mises à jour
9. Mode EXPERT
- VALIDATION: Valider que toutes les catégories ont une option sélectionnée avant la finalisation du build
- VISUEL: Améliorer l’interface avec des images
- DESIGN: Perfectionner le design avec Bootstrap 5
Conclusion
Cette partie vous permet de revoir l’ensemble des notions de base en construisant une application interactive pour configurer un ordinateur personnalisé avec une interface moderne et réactive!
Remise finale
**Tout le monde:** Remettre le tout sur Léa dans **Exercice 09** pour le prochain cours!
** IMPORTANT: **Supprimer le dossier node_modules