v-text — это директива Petite-Vue, предназначенная для
вставки текстового содержимого в HTML-элемент. Она используется для
динамического связывания данных с DOM без необходимости явно
использовать интерполяцию через {{ }}. Основное
преимущество v-text заключается в том, что она заменяет
внутренний текст элемента, гарантируя, что содержимое будет обновляться
при изменении данных.
<div v-scope="{ message: 'Привет, Petite-Vue!' }">
<p v-text="message"></p>
</div>
В этом примере текст внутри <p> автоматически
примет значение переменной message. Если
message изменится, Petite-Vue обновит текстовое содержимое
элемента.
v-text от
интерполяцииИспользование v-text отличается от шаблонной
интерполяции {{ message }} по нескольким аспектам:
Очистка предыдущего содержимого
v-text полностью заменяет текст внутри элемента, что
исключает вероятность смешивания старого и нового содержимого.
Удобство для динамического обновления При частых
обновлениях данных v-text обеспечивает более предсказуемое
поведение, особенно если текст формируется программно или получен из
внешнего источника.
Безопасность Директива экранирует HTML,
предотвращая выполнение нежелательного кода. Если требуется вставка
HTML, используется v-html.
v-text автоматически реагирует на изменения данных.
Например:
<div v-scope="{ count: 0 }">
<button @click="count++">Увеличить</button>
<p v-text="count"></p>
</div>
При каждом нажатии на кнопку значение переменной count
увеличивается, а текст внутри <p> обновляется без
дополнительных вызовов методов.
v-text может связываться с вычисляемыми свойствами или
методами, возвращающими строку:
<div v-scope="{
firstName: 'Иван',
lastName: 'Иванов',
fullName() { return `${this.firstName} ${this.lastName}` }
}">
<p v-text="fullName()"></p>
</div>
Здесь результат метода fullName вставляется в текст
элемента. Любое изменение firstName или
lastName автоматически обновит текст.
Можно использовать тернарные операции или логические выражения прямо в директиве:
<div v-scope="{ isLoggedIn: true }">
<p v-text="isLoggedIn ? 'Добро пожаловать!' : 'Пожалуйста, войдите'"></p>
</div>
Текст будет меняться в зависимости от состояния переменной
isLoggedIn.
v-text заменяет только текстовое
содержимое, атрибуты элемента не изменяет. Для работы с
атрибутами применяются другие директивы, например
v-bind.v-text и
внутреннего текста элемента, так как содержимое будет перезаписано.v-text для динамических текстов, которые
не требуют HTML-разметки.{{ }}.v-text
обеспечивает защиту от нежелательного HTML и XSS.<div v-scope="{
notifications: ['Сообщение 1', 'Сообщение 2'],
user: { name: 'Мария', loggedIn: true },
messageCount() { return this.notifications.length; }
}">
<h1 v-text="user.loggedIn ? `Привет, ${user.name}` : 'Гость'"></h1>
<p v-text="`У вас ${messageCount()} новых уведомлений.`"></p>
</div>
В этом примере v-text используется для нескольких
динамических текстов, комбинируя данные пользователя и вычисляемое
свойство messageCount.
Хотя v-text выглядит простой директивой, её правильное
использование позволяет управлять динамическим текстовым содержимым
эффективно и безопасно, обеспечивая чистоту кода и предсказуемое
поведение DOM.