Capítulo 2 de 11

Tutorial VueJS 3 – Ligar atributos HTML com v-bind

verificado a 2 Setembro 2026 · 3 min

Resposta rápida

As chavetas duplas não funcionam dentro de um atributo. Para ligar um atributo a um dado, usa a diretiva v-bind, ou o seu atalho de dois-pontos: :src="image". A ligação é reativa e vai do dado para o template.

No fim deste capítulo, saberás ligar qualquer atributo HTML a um dado do teu componente.

O capítulo anterior mostrou texto entre chavetas duplas. Essas chavetas só funcionam entre as tags, nunca dentro de um atributo. Para ligar um atributo a um dado é preciso uma diretiva: o v-bind.

A imagem do produto

A nossa loja precisa de uma imagem. Põe dois ficheiros em public/images/: t-shirt-bleu.svg e t-shirt-rouge.svg. Tudo o que está arrumado em public/ é servido tal como está na raiz do site, por isso o caminho no código será /images/t-shirt-bleu.svg.

Acrescenta uma referência para o caminho da imagem:

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

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

O que não funciona

Primeiro reflexo: escrever o nome da variável no atributo.

html
<img src="image">

O browser procura então um ficheiro literalmente chamado image e mostra uma imagem partida. O atributo recebeu a string "image", não o valor da variável.

Segundo reflexo: as chavetas.

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

Também não resulta. O Vue interpola o texto dos nós, não os atributos.

v-bind

A resposta certa é a diretiva v-bind. Diz ao Vue: «o conteúdo deste atributo é uma expressão JavaScript, avalia-a».

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>

A imagem aparece e o atributo alt retoma o nome do produto.

O atalho dos dois-pontos

O v-bind é de tal maneira frequente que tem uma forma curta: os dois-pontos sozinhos.

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

As duas escritas são estritamente equivalentes. A forma curta é a que se encontra por todo o lado, incluindo na documentação oficial, é a que vamos usar no resto do tutorial.

Uma ligação, não uma cópia

A ligação é reativa e faz-se num só sentido: do dado para o template. Se mudares o valor, o atributo acompanha.

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

// mais tarde, no clique ou no hover:
image.value = '/images/t-shirt-rouge.svg'   // o src da img muda logo

É este mecanismo que o capítulo 5 vai usar para mudar a imagem quando passas o rato por cima de uma cor.

O que o v-bind sabe fazer mais

Qualquer atributo se liga da mesma maneira.

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">

Dois casos merecem uma nota.

Os atributos booleanos como o disabled seguem a regra do HTML: o Vue acrescenta o atributo se a expressão for verdadeira e retira-o por completo se for falsa. Escrever :disabled="false" dá um botão ativo, não um botão com disabled="false".

Os atributos class e style têm um tratamento especial: aceitam também objetos e arrays. É o tema do capítulo 6.

Na Options API

Nada muda. O v-bind e o seu atalho escrevem-se da mesma maneira: é uma diretiva de template, independente do estilo de escrita do script.

ExercícioAcrescenta um dado lienFiche e um link <a> cujo href lhe esteja ligado. Depois liga o atributo title da imagem ao nome do produto.

Erros frequentes

Escrever src="image" sem dois-pontos O atributo recebe a string «image» e o browser procura um ficheiro com esse nome. É preciso :src="image".
Usar chavetas dentro de um atributo src="{{ image }}" não funciona: a interpolação só se aplica ao texto entre as tags.
:disabled="false" deixa o botão ativo É o comportamento esperado: o Vue retira por completo um atributo booleano quando a expressão é falsa.
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.