Привязка атрибутов: v-bind и :

Учимся подставлять данные не только в текст, но и в атрибуты тегов — через директиву v-bind и её краткую запись «двоеточие».

v-bind — директива, которая связывает значение атрибута HTML с выражением из данных компонента. Краткая запись — двоеточие перед именем атрибута: :href.

Зачем нужен v-bind

Интерполяция {{ }} работает только в тексте. Но часто динамическим должен быть атрибут: ссылка href, картинка src, состояние disabled. Написать href="{{ url }}" нельзя — это не сработает. Для атрибутов есть директива v-bind:

<template>
  <a v-bind:href="url">Перейти</a>
  <img v-bind:src="imageUrl" v-bind:alt="caption">
</template>

<script setup>
import { ref } from 'vue'
const url = ref('https://vuejs.org')
const imageUrl = ref('/logo.png')
const caption = ref('Логотип Vue')
</script>

Краткая запись :

Полную форму v-bind:href пишут редко — почти всегда используют сокращение в виде двоеточия. Это самая частая запись во всём Vue:

<template>
  <a :href="url">Перейти</a>
  <img :src="imageUrl" :alt="caption">
  <button :disabled="isLoading">Отправить</button>
</template>

Обратите внимание на :disabled="isLoading": значение — это выражение, а не строка. Если isLoading равно true, кнопка станет неактивной. Если false — Vue вообще уберёт атрибут disabled. С булевыми атрибутами это работает само.

Выражения в привязках

Справа от :атрибут может стоять любое JS-выражение, как и в интерполяции:

<template>
  <a :href="'/users/' + userId">Профиль</a>
  <img :src="user.avatar || '/default.png'">
</template>

Текст против атрибута

Куда вставляемСинтаксис
В текст элемента<p>{{ value }}</p>
В атрибут<a :href="value">

Запомните правило: фигурные скобки — для текста, двоеточие — для атрибутов. Это убирает 90% путаницы у новичков.

Итог

  • v-bind связывает атрибут HTML с выражением из данных.
  • Краткая запись — двоеточие: :href, :src, :disabled.
  • Значение справа — это выражение, а не строка.
  • Интерполяция {{ }} — для текста, : — для атрибутов.
Проверьте себя
1. Зачем нужна директива v-bind, если есть интерполяция {{ }}?
Av-bind работает быстрее
BИнтерполяция работает только в тексте, а v-bind связывает с данными атрибуты тегов (href, src, disabled)
Cv-bind нужен только для форм
DЭто устаревший аналог интерполяции
2. Какая краткая запись у v-bind:href?
A@href
B#href
C:href
Dv-href
3. Что произойдёт с :disabled="false" на кнопке?
AКнопка станет неактивной
BVue выведет ошибку
CVue уберёт атрибут disabled, и кнопка будет активной
DНа кнопке появится текст false
Поддержать проект