Chapitre 2 sur 11

Tutoriel VueJS 3 – Liaison d’attributs

vérifié le 2 septembre 2026 · 3 min

Réponse rapide

Les doubles accolades ne fonctionnent pas dans un attribut. Pour lier un attribut à une donnée, utilisez la directive v-bind, ou son raccourci deux-points : :src="image". La liaison est réactive et va de la donnée vers le gabarit.

À la fin de ce chapitre, vous saurez lier n’importe quel attribut HTML à une donnée de votre composant.

Le chapitre précédent a affiché du texte entre doubles accolades. Ces accolades ne fonctionnent qu’entre les balises, jamais dans un attribut. Pour lier un attribut à une donnée, il faut une directive : v-bind.

L’image du produit

Notre boutique a besoin d’une image. Placez deux fichiers dans public/images/ : t-shirt-bleu.svg et t-shirt-rouge.svg. Tout ce qui est rangé dans public/ est servi tel quel à la racine du site, donc le chemin dans le code sera /images/t-shirt-bleu.svg.

Ajoutez une référence pour le chemin de l’image :

src/App.vue
<script setup>
import { ref } from 'vue'

const product = ref('T-Shirt')
const image = ref('/images/t-shirt-bleu.svg')
</script>

Ce qui ne marche pas

Premier réflexe, écrire le nom de la variable dans l’attribut :

html
<img src="image">

Le navigateur cherche alors un fichier littéralement nommé image et affiche une image cassée. L’attribut a reçu la chaîne "image", pas la valeur de la variable.

Deuxième réflexe, les accolades :

html
<img src="{{ image }}">

Cela ne marche pas non plus. Vue interpole le texte des nœuds, pas les attributs.

v-bind

La bonne réponse est la directive v-bind. Elle dit à Vue : « le contenu de cet attribut est une expression JavaScript, évalue-la ».

src/App.vue
<template>
  <div class="product-display">
    <div class="product-image">
      <img v-bind:src="image" v-bind:alt="product">
    </div>
    <div class="product-info">
      <h1>{{ product }}</h1>
    </div>
  </div>
</template>

L’image s’affiche, et l’attribut alt reprend le nom du produit.

Le raccourci deux-points

v-bind est tellement courant qu’il a une forme courte : les deux-points seuls.

src/App.vue
<img :src="image" :alt="product">

Les deux écritures sont strictement équivalentes. La forme courte est celle qu’on trouve partout, y compris dans la documentation officielle, c’est celle que nous utiliserons dans la suite du tutoriel.

Une liaison, pas une copie

La liaison est réactive et dans un seul sens : de la donnée vers le gabarit. Si vous changez la valeur, l’attribut suit.

javascript
const image = ref('/images/t-shirt-bleu.svg')

// plus tard, au clic ou au survol :
image.value = '/images/t-shirt-rouge.svg'   // le src de l’img change aussitôt

C’est ce mécanisme que le chapitre 5 utilisera pour changer l’image au survol d’une couleur.

Ce que v-bind sait faire d’autre

N’importe quel attribut se lie de la même façon.

html
<a :href="lienProduit">Voir la fiche</a>
<button :disabled="enRupture">Ajouter au panier</button>
<div :class="classeCourante"></div>
<div :style="{ backgroundColor: couleur }"></div>
<input :value="nom">

Deux cas méritent une note.

Les attributs booléens comme disabled suivent la règle du HTML : Vue ajoute l’attribut si l’expression est vraie et le retire complètement si elle est fausse. Écrire :disabled="false" produit un bouton actif, pas un bouton portant disabled="false".

Les attributs class et style ont un traitement spécial : ils acceptent aussi des objets et des tableaux. C’est le sujet du chapitre 6.

En Options API

Rien ne change. v-bind et son raccourci s’écrivent de la même manière : c’est une directive de gabarit, indépendante du style d’écriture du script.

ExerciceAjoutez une donnée lienFiche et un lien <a> dont le href y est lié. Puis liez l’attribut title de l’image au nom du produit.

Erreurs fréquentes

Écrire src="image" sans deux-points L’attribut reçoit la chaîne « image » et le navigateur cherche un fichier de ce nom. Il faut :src="image".
Utiliser les accolades dans un attribut src="{{ image }}" ne fonctionne pas : l’interpolation ne s’applique qu’au texte entre les balises.
:disabled="false" laisse le bouton actif C’est le comportement attendu : Vue retire complètement un attribut booléen quand l’expression est fausse.
Newsletter

Les nouveaux tests, tutoriels et projets, par e-mail.

Tests reproductibles, code versionné, résultats datés. Jamais de spam.