Séance 1 : Introduction & rappel Vue
🎯 Objectifs
Vérifier et réactiver les acquis de BUT2.
Mettre en place un projet clean (environnement, conventions).
📖 Partie théorique
Directives Vue et structure de projet
Directives Vue de base
Les directives sont des attributs spéciaux avec le préfixe v- qui appliquent un comportement réactif au DOM.
<template>
<div>
<!-- v-if : affichage conditionnel -->
<p v-if="user.isLoggedIn">Bienvenue {{ user.name }} !</p>
<p v-else>Veuillez vous connecter</p>
<!-- v-show : visibilité conditionnelle (CSS display) -->
<div v-show="showDetails" class="details">Détails supplémentaires</div>
<!-- v-for : boucles -->
<ul>
<li v-for="task in tasks" :key="task.id">
{{ task.title }} - {{ task.status }}
</li>
</ul>
<!-- v-model : liaison bidirectionnelle -->
<input v-model="searchQuery" placeholder="Rechercher...">
<p>Recherche : {{ searchQuery }}</p>
<!-- v-bind (:) : liaison d'attributs -->
<button
:class="{ active: isActive, disabled: isDisabled }"
:disabled="isDisabled"
@click="toggleActive"
>
{{ isActive ? 'Actif' : 'Inactif' }}
</button>
<!-- v-on (@) : gestion d'événements -->
<button @click="handleClick" @keyup.enter="handleEnter">
Cliquer ou Entrée
</button>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
const user = reactive({
isLoggedIn: true,
name: 'Alice'
})
const showDetails = ref(false)
const searchQuery = ref('')
const isActive = ref(false)
const isDisabled = ref(false)
const tasks = ref([
{ id: 1, title: 'Tâche 1', status: 'En cours' },
{ id: 2, title: 'Tâche 2', status: 'Terminée' }
])
const toggleActive = () => {
isActive.value = !isActive.value
}
const handleClick = () => {
console.log('Bouton cliqué')
}
const handleEnter = () => {
console.log('Entrée pressée')
}
</script>Rappel Vue 3 : Composition API
ref() - Réactivité pour les primitives
ref() crée une référence réactive pour les valeurs primitives (string, number, boolean).
reactive() - Réactivité pour les objets
reactive() rend un objet entièrement réactif, toutes ses propriétés deviennent réactives.
computed() - Propriétés calculées
computed() crée des valeurs dérivées qui se mettent à jour automatiquement quand leurs dépendances changent.
watch() - Surveillance des changements
watch() permet d'exécuter du code quand une valeur réactive change.
Cycle de vie des composants
Les hooks de cycle de vie permettent d'exécuter du code à des moments précis de la vie du composant.
Props, emits et slots
Props - Transmission de données du parent vers l'enfant
Les props permettent de passer des données du composant parent vers le composant enfant.
Emits - Remontée d'événements de l'enfant vers le parent
Les emits permettent au composant enfant de notifier le parent d'un événement.
Slots - Injection de contenu personnalisé
Les slots permettent de créer des composants avec du contenu personnalisable. Le composant parent peut injecter du HTML/contenu dans des emplacements définis par le composant enfant.
Slot simple :
Slots nommés :
Communication entre composants - Résumé
Props : Parent → Enfant (données descendantes)
Emits : Enfant → Parent (événements remontants)
Slots : Parent → Enfant (contenu HTML personnalisé)
Cette combinaison permet une communication flexible et maintenable entre les composants Vue.
Bonnes pratiques
Organisation du code
Structuration des composants :
Conventions de nommage
Performance et réactivité
Gestion des erreurs
Accessibilité et UX
📝 Travaux pratiques
Objectif
Créer une application de gestion de tâches simple pour réviser les concepts Vue 3 de base.
Étape 1 : Initialisation du projet
Créer un nouveau projet Vue 3 :
Configuration recommandée lors de la création :
✅ TypeScript → Non (pour cette séance)
✅ JSX → Non
✅ Vue Router → Non (pour cette séance)
✅ Pinia → Non (vu plus tard)
✅ Vitest → Non
✅ Playwright → Non
✅ ESLint → Oui
Étape : Test et amélioration
Fonctionnalités à tester :
Ajout de nouvelles tâches
Validation du formulaire (champs requis)
Marquage des tâches comme terminées
Suppression des tâches
Filtrage par statut
Compteurs dynamiques
Améliorations possibles :
Ajouter une date de création
Permettre l'édition des tâches
Sauvegarder dans le localStorage
Ajouter des animations CSS
Last updated