Syntaxe des templates
Texte et expressions
{{ message }} {{ count + 1 }} {{ ok ? 'Yes' : 'No' }}
Directives
{{ expr }}Interpolation de texte
v-bind:attr / :attrLier un attribut à une expression
v-on:event / @eventAttacher un écouteur d'événement
v-modelLiaison bidirectionnelle (formulaires)
v-if / v-else-if / v-elseRendu conditionnel
v-showBasculer le CSS display (reste dans le DOM)
v-forRendu de liste
v-slot / #nameContenu d'un slot nommé
Liaison d'attributs
Réactivité
ref (primitifs)
import { ref } from 'vue' const count = ref(0) console.log(count.value) // 0 count.value++ // reactive update
reactive (objets)
import { reactive } from 'vue' const state = reactive({ count: 0, name: 'Vue' }) state.count++ // no .value needed
ref vs reactive
ref()N'importe quel type ; accès via .value dans le script
reactive()Objets/tableaux uniquement ; accès direct aux propriétés
TemplateLes deux se déballent automatiquement (.value inutile)
Destructurereactive perd la réactivité ; utiliser toRefs()
Propriétés calculées et observateurs
Propriétés calculées
import { ref, computed } from 'vue' const items = ref([1, 2, 3, 4, 5]) const evenItems = computed(() => items.value.filter(n => n % 2 === 0) )

Les valeurs calculées sont mises en cache et ne se réévaluent que si les dépendances changent

Observateurs
import { ref, watch, watchEffect } from 'vue' const query = ref('') // Watch specific source watch(query, (newVal, oldVal) => { console.log(`Changed: ${oldVal} → ${newVal}`) }) // Auto-track dependencies watchEffect(() => { console.log(`Query is: ${query.value}`) })
Options d'observateur
immediate: trueExécuter le rappel immédiatement à la création
deep: trueObserver en profondeur les objets imbriqués
flush: 'post'Exécuter après la mise à jour du DOM
once: trueSe déclencher une seule fois puis s'arrêter
Composants
Composant à fichier unique (SFC)
Enregistrer des composants
Blocs SFC
<script setup>API de composition (recommandée)
<template>Template HTML
<style scoped>CSS limité au composant
<style module>CSS Modules (objet $style)
Props et événements
Définir des props
Émettre des événements
Utilisation depuis le parent
v-model sur les composants
Slots
Slot par défaut

Custom content here

Slots nommés

Main content

Slots délimités
API de composition
Fonction composable
// useMouse.js import { ref, onMounted, onUnmounted } from 'vue' export function useMouse() { const x = ref(0) const y = ref(0) function update(e) { x.value = e.pageX y.value = e.pageY } onMounted(() => window.addEventListener('mousemove', update)) onUnmounted(() => window.removeEventListener('mousemove', update)) return { x, y } }
Utiliser des composables
provide / inject
// Parent import { provide, ref } from 'vue' const theme = ref('dark') provide('theme', theme) // Descendant (any depth) import { inject } from 'vue' const theme = inject('theme', 'light') // default
Routeur (Vue Router)
Définitions de routes
import { createRouter, createWebHistory } from 'vue-router' const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', component: Home }, { path: '/about', component: About }, { path: '/user/:id', component: User }, ] })
Navigation dans le template
Home User 1
Navigation programmatique
import { useRouter, useRoute } from 'vue-router' const router = useRouter() const route = useRoute() router.push('/about') router.push({ name: 'user', params: { id: 1 } }) console.log(route.params.id)
Fonctionnalités de route
/user/:idSegment dynamique (route.params.id)
name: 'user'Route nommée pour la navigation programmatique
children: [...]Routes imbriquées
beforeEnterGarde de navigation par route
meta: { auth: true }Métadonnées personnalisées pour les gardes
redirect: '/new-path'Redirection de route
Hooks de cycle de vie
Ordre des hooks
onBeforeMountAvant le rendu DOM initial
onMountedDOM prêt (récupérer des données, ajouter des écouteurs)
onBeforeUpdateAvant que l'état réactif ne re-rende le DOM
onUpdatedAprès le re-rendu du DOM
onBeforeUnmountAvant la destruction du composant
onUnmountedNettoyage (supprimer les écouteurs, minuteries)
Utilisation
Listes et conditions
v-for
  • {{ item.name }}
  • {{ index }}: {{ item.name }}
  • {{ key }}: {{ val }}

    Toujours utiliser :key avec v-for pour des mises à jour DOM efficaces

    v-if vs v-show
    v-ifRendu conditionnel (ajouter/supprimer du DOM)
    v-else-ifChaîne else-if
    v-elseBranche de repli
    v-showBasculer display: none (reste dans le DOM)

    Utiliser v-show pour les bascules fréquentes, v-if pour les changements rares

    Exemple de conditions
    Loading...
    Error!
    {{ data }}
    Gestion des formulaires
    Bases de v-model
    Modificateurs de v-model
    v-model.lazySynchroniser sur change au lieu de input
    v-model.numberConversion automatique en nombre
    v-model.trimSupprimer automatiquement les espaces en début/fin
    Modificateurs d'événements
    @click.preventAppeler preventDefault()
    @click.stopAppeler stopPropagation()
    @click.onceSe déclencher au plus une fois
    @keyup.enterUniquement sur la touche Entrée
    @submit.preventEmpêcher la soumission par défaut du formulaire