Le template et les directives
Ce que tu vas apprendre
- Afficher une valeur avec
{{ }}et lier un attribut avecv-bind. - Réagir à un clic avec
v-on. - Afficher selon une condition (
v-if) et répéter un élément (v-foraveckey).
Afficher une valeur : l'interpolation
L'interpolation insère une valeur JavaScript dans le texte, avec des doubles accolades :
<script setup>
const titre = 'Tarte aux pommes'
</script>
<template>
<h2>Recette : {{ titre }}</h2>
</template>
Si titre change, le texte se met à jour. Entre les accolades, tu peux écrire une expression JavaScript, par exemple {{ titre.toUpperCase() }}.
Lier un attribut : v-bind
Les accolades ne fonctionnent pas dans un attribut HTML. Pour y mettre une valeur JavaScript, on utilise une directive : un attribut spécial de Vue, qui commence par v-.
<script setup>
const image = '/tarte.jpg'
const id = 'photo-tarte'
</script>
<template>
<img v-bind:src="image" alt="Une tarte" />
<img :src="image" alt="Une tarte" />
<img :id />
</template>
v-bind:src se raccourcit en :src. Quand le nom de l'attribut est le même que celui de la variable, on peut même écrire :id, comme dans la dernière ligne (Vue 3.4 et suivants).
Réagir à un événement : v-on
v-on attache une fonction à un événement du navigateur. Son raccourci est @.
<script setup>
import { ref } from 'vue'
const portions = ref(4)
function ajouter() {
portions.value++
}
</script>
<template>
<p>Pour {{ portions }} personnes</p>
<button @click="ajouter">Une portion de plus</button>
</template>
Entre guillemets, tu peux donner un nom de fonction (@click="ajouter") ou une courte instruction (@click="portions++").
ref se lit avec .value. Dans le template, Vue enlève ce .value pour toi. La réactivité est détaillée au prochain chapitre.Afficher selon une condition : v-if
v-if affiche l'élément seulement si la condition est vraie. v-else-if et v-else donnent les autres cas.
<template>
<p v-if="portions > 8">Recette pour un banquet</p>
<p v-else-if="portions > 2">Recette pour la famille</p>
<p v-else>Recette pour une ou deux personnes</p>
</template>
Pour conditionner plusieurs éléments à la fois, entoure-les d'un <template v-if="...">. Cette balise n'apparaît pas dans la page finale.
v-if ou v-show ?
v-show affiche aussi selon une condition, mais d'une autre manière.
| Directive | Ce qu'elle fait | Pour quel usage |
|---|---|---|
v-if | Crée ou détruit l'élément. | Une condition qui change rarement. |
v-show | Garde l'élément, change son CSS display. | Un affichage qui bascule souvent. |
v-show ne fonctionne pas sur <template> et ne se combine pas avec v-else.
Répéter un élément : v-for
v-for crée un élément par entrée d'un tableau.
<script setup>
import { ref } from 'vue'
const recettes = ref([
{ id: 1, nom: 'Tarte aux pommes' },
{ id: 2, nom: 'Soupe à l\'oignon' },
{ id: 3, nom: 'Crêpes' }
])
</script>
<template>
<ul>
<li v-for="recette in recettes" :key="recette.id">
{{ recette.nom }}
</li>
</ul>
</template>
Pour récupérer aussi la position, écris v-for="(recette, index) in recettes". L'index commence à 0.
Pourquoi la key ?
L'attribut :key donne à chaque élément une identité unique. Sans lui, Vue réutilise les éléments existants dans l'ordre. C'est gênant si les éléments contiennent des composants ou des champs de saisie : le texte tapé dans un champ peut se retrouver dans la mauvaise ligne après un tri.
Prends un identifiant propre à chaque donnée, comme recette.id. La clé doit être un nombre ou du texte, pas un objet.
v-html (qui insère du HTML brut) que sur du contenu de confiance, jamais sur du texte saisi par un visiteur : c'est une porte ouverte aux attaques XSS.À retenir
{{ valeur }}affiche une valeur dans le texte,:attribut="valeur"dans un attribut.@click="fonction"écoute un événement,@est le raccourci dev-on:.v-if,v-else-ifetv-elsecréent ou détruisent des éléments ;v-showchange seulement le CSS.v-for="x in liste"répète un élément, et chaque élément reçoit une:keyunique.v-htmln'est jamais sûr avec du contenu venant d'un utilisateur.
Pour aller plus loin
Sources officielles
Ensuite
Ton premier composant Vue
Créer un projet Vue 3 avec l'outil officiel, découvrir le composant monofichier .vue et la syntaxe script setup.
La réactivité
Déclarer un état avec ref et reactive, calculer des valeurs dérivées avec computed et lier un champ de formulaire avec v-model.
- Projet
- Lignes de code
- Niveau
- 4e étage
- Appartement
- Vue
- Pièce
- 2/7
- Plan n°
- vue/02.template-et-directives