Kapitel 2 von 11

VueJS-3-Tutorial: HTML-Attribute mit v-bind binden

geprüft am 2 September 2026 · 3 Min.

Schnelle Antwort

Doppelte geschweifte Klammern funktionieren in einem Attribut nicht. Um ein Attribut an Daten zu binden, nimmst du die Direktive v-bind oder ihre Kurzform mit Doppelpunkt: :src="image". Die Bindung ist reaktiv und läuft von den Daten zum Template.

Am Ende dieses Kapitels, kannst du jedes beliebige HTML-Attribut an die Daten deiner Komponente binden.

Im vorigen Kapitel stand Text zwischen doppelten geschweiften Klammern. Diese Klammern funktionieren nur zwischen den Tags, nie in einem Attribut. Um ein Attribut an Daten zu binden, brauchst du eine Direktive: v-bind.

Das Produktbild

Unser Shop braucht ein Bild. Leg zwei Dateien in public/images/ ab: t-shirt-bleu.svg und t-shirt-rouge.svg. Alles, was in public/ liegt, wird unverändert im Wurzelverzeichnis der Website ausgeliefert, der Pfad im Code lautet deshalb /images/t-shirt-bleu.svg.

Ergänze eine Ref für den Bildpfad:

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

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

Was nicht funktioniert

Der erste Reflex ist, den Namen der Variablen in das Attribut zu schreiben:

html
<img src="image">

Der Browser sucht daraufhin eine Datei, die wörtlich image heißt, und zeigt ein kaputtes Bild. Das Attribut hat den String "image" bekommen, nicht den Wert der Variablen.

Der zweite Reflex sind die geschweiften Klammern:

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

Auch das funktioniert nicht. Vue interpoliert den Text von Knoten, keine Attribute.

v-bind

Die richtige Antwort ist die Direktive v-bind. Sie sagt Vue: „Der Inhalt dieses Attributs ist ein JavaScript-Ausdruck, werte ihn aus.“

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>

Das Bild erscheint, und das Attribut alt übernimmt den Produktnamen.

Die Kurzform mit Doppelpunkt

v-bind kommt so häufig vor, dass es eine Kurzform hat: den Doppelpunkt allein.

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

Beide Schreibweisen sind exakt gleichwertig. Die Kurzform findest du überall, auch in der offiziellen Dokumentation, sie kommt im weiteren Verlauf des Tutorials zum Einsatz.

Eine Bindung, keine Kopie

Die Bindung ist reaktiv und läuft in eine Richtung: von den Daten zum Template. Änderst du den Wert, zieht das Attribut nach.

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

// später, beim Klick oder beim Hovern:
image.value = '/images/t-shirt-rouge.svg'   // das src des img ändert sich sofort

Genau diesen Mechanismus nutzt Kapitel 5, um das Bild beim Hovern über eine Farbe zu wechseln.

Was v-bind sonst noch kann

Jedes beliebige Attribut wird auf dieselbe Weise gebunden.

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

Zwei Fälle verdienen eine Anmerkung.

Boolesche Attribute wie disabled folgen der HTML-Regel: Vue setzt das Attribut, wenn der Ausdruck wahr ist, und entfernt es vollständig, wenn er falsch ist. :disabled="false" ergibt einen aktiven Button, keinen Button mit disabled="false".

Die Attribute class und style werden gesondert behandelt: Sie nehmen auch Objekte und Arrays entgegen. Darum geht es in Kapitel 6.

In der Options API

Nichts ändert sich. v-bind und seine Kurzform werden genauso geschrieben: Es ist eine Template-Direktive, unabhängig davon, wie das Skript aufgebaut ist.

ÜbungErgänze eine Variable lienFiche und einen Link <a>, dessen href daran gebunden ist. Binde anschließend das Attribut title des Bildes an den Produktnamen.

Häufige Fehler

src="image" ohne Doppelpunkt schreiben Das Attribut bekommt den String „image“, und der Browser sucht eine Datei mit diesem Namen. Richtig ist :src="image".
Geschweifte Klammern im Attribut verwenden src="{{ image }}" funktioniert nicht: Die Interpolation gilt nur für den Text zwischen den Tags.
:disabled="false" lässt den Button aktiv Das ist das erwartete Verhalten: Vue entfernt ein boolesches Attribut vollständig, wenn der Ausdruck falsch ist.
Newsletter

Neue Tests, Tutorials und Projekte, per E-Mail.

Reproduzierbare Tests, versionierter Code, datierte Ergebnisse. Niemals Spam.