В Petite-Vue управление многострочным текстом реализуется с помощью реактивных данных и привязок к DOM. Библиотека сохраняет компактность синтаксиса Vue, но ориентирована на лёгкие сценарии без необходимости полной настройки компонентов и сборщиков.
Любой многострочный текст в Petite-Vue хранится в реактивной
переменной. Для этого используется объект, передаваемый в
v-scope:
<div v-scope="{ description: `Это многострочный
текст, который можно
редактировать и отображать
в шаблоне.` }">
<pre>{{ description }}</pre>
</div>
Особенности:
`) позволяет хранить
текст с переносами строк без необходимости вставки \n.<pre> сохраняет форматирование текста,
включая пробелы и переносы строк.description автоматически
обновляют отображение.<textarea>Для интерактивного редактирования многострочного текста применяется
привязка v-model:
<div v-scope="{ content: `Начальный текст
с переносами строк.` }">
<textarea v-model="content" rows="5" cols="40"></textarea>
<pre>{{ content }}</pre>
</div>
Пояснения:
v-model обеспечивает двустороннюю реактивность между
<textarea> и свойством content.<textarea> мгновенно
отображаются в <pre>.Для сохранения многострочного форматирования без использования
<pre> применяется фильтрация символов переноса
строки. Например, с помощью v-html и замены \n
на <br>:
<div v-scope="{ notes: `Строка 1
Строка 2
Строка 3` }">
<div v-html="notes.replace(/\n/g, '<br>')"></div>
</div>
Ключевые моменты:
replace(/\n/g, '<br>') преобразует переносы
строк в HTML-разметку.v-html необходимо для корректного
отображения <br> вместо буквальных символов
\n.Многострочные данные можно использовать внутри вычисляемых свойств или функций для динамического изменения текста:
<div v-scope="{
title: 'Заголовок',
body: `Первый абзац
Второй абзац`,
formattedBody() {
return this.body.toUpperCase();
}
}">
<h2>{{ title }}</h2>
<pre>{{ formattedBody() }}</pre>
</div>
Особенности:
body автоматически отражаются в
formattedBody().Можно комбинировать несколько реактивных переменных для построения итогового текста:
<div v-scope="{
header: 'Вступление',
content: `Текст первого абзаца
Текст второго абзаца`,
footer: 'Заключение',
fullText() {
return `${this.header}\n${this.content}\n${this.footer}`;
}
}">
<pre>{{ fullText() }}</pre>
</div>
Примечания:
<pre> или CSS-свойство
white-space: pre-wrap.v-model обеспечивает
мгновенное обновление реактивных данных.Многострочный текст в Petite-Vue управляется простыми реактивными объектами, что позволяет создавать динамичные интерфейсы с минимальным количеством кода, сохраняя форматирование и обеспечивая гибкость при редактировании.