Vue.js предоставляет мощный механизм для связывания данных с представлением через интерполяцию. Интерполяция позволяет внедрять данные из компонентов напрямую в HTML-шаблоны, обеспечивая реактивное обновление интерфейса при изменении состояния приложения.
Основной способ внедрения данных в HTML — использование двойных фигурных скобок:
<div>{{ message }}</div>
Здесь message — это свойство из объекта
data компонента. Vue автоматически отслеживает изменения
message и обновляет DOM при его модификации.
Можно использовать выражения внутри интерполяции:
<div>{{ message.toUpperCase() }}</div>
<div>{{ 10 + 5 }}</div>
Выражения в шаблонах должны быть простыми и
синхронными. Vue запрещает использование управляющих
конструкций, таких как if или for, в
интерполяциях.
Для динамических значений атрибутов применяется директива
v-bind или сокращённая запись ::
<img :src="imageSrc" alt="Изображение">
<a :href="url">{{ linkText }}</a>
Это позволяет напрямую связывать свойства компонента с атрибутами
HTML. Любые изменения в imageSrc или url
автоматически отражаются в DOM.
Интерполяции можно комбинировать с обычным текстом:
<p>Привет, {{ userName }}!</p>
<p>Ваш баланс: {{ balance.toFixed(2) }} USD</p>
Vue гарантирует, что весь текст остаётся реактивным, и пересчитывается при каждом изменении зависимых данных.
Интерполяция поддерживает доступ к свойствам объектов и массивов:
<div>{{ user.name }}</div>
<div>{{ items[0].title }}</div>
Также можно использовать вызовы методов компонента:
<div>{{ greet(user.name) }}</div>
Методы вызываются как обычные функции, но должны быть
определены в объекте methods
компонента.
В Vue 2 существовали фильтры, которые применяются к
выражениям интерполяции через символ |:
<p>{{ message | capitalize }}</p>
Фильтры позволяют трансформировать данные перед выводом в шаблон, например, для форматирования текста или чисел. В Vue 3 фильтры официально удалены, их заменяют вычисляемые свойства или методы.
Интерполяция работает в тесной связке с реактивной системой Vue. Если значение зависит от других реактивных свойств, его лучше выносить в вычисляемое свойство:
computed: {
fullName() {
return this.user.firstName + ' ' + this.user.lastName;
}
}
<p>{{ fullName }}</p>
Это позволяет избежать избыточного вычисления в шаблоне и поддерживать чистоту кода.
Иногда требуется вставить HTML-код динамически. Для этого
используется директива v-html:
<div v-html="rawHtml"></div>
Важно помнить о безопасности, так как
v-html напрямую вставляет HTML и может быть уязвим к
XSS-атакам.
if, for, while).Интерполяция тесно связана с динамическим управлением атрибутами классов и стилей через объектную или массивную синтаксис:
<div :class="{ active: isActive, disabled: !isEnabled }"></div>
<div :style="{ color: textColor, fontSize: fontSize + 'px' }"></div>
В этих случаях Vue вычисляет значения выражений и обновляет соответствующие атрибуты реактивно при изменении состояния.
Интерполяция является фундаментальным инструментом Vue.js для связывания данных с интерфейсом, создавая чистый, декларативный и реактивный код.