Компонент QMarkup библиотеки Quasar предназначен для безопасного отображения HTML-разметки внутри Vue-приложений. Он обеспечивает рендеринг строк с HTML-кодом, автоматически защищая от XSS-атак и поддерживая динамическое обновление содержимого.
value Основное свойство, которое
принимает строку с HTML-кодом для отображения. Например:
<q-markup :value="htmlContent" />
Где htmlContent может содержать любой допустимый
HTML:
data() {
return {
htmlContent: "<h2>Заголовок</h2><p>Текст параграфа</p>"
}
}
tag Позволяет задать HTML-тег, который
будет обертывать весь контент. По умолчанию это
<div>, но можно использовать
<section>, <article>,
<span> и другие:
<q-markup :value="htmlContent" tag="section" />
sanitize Логическое свойство,
управляющее очисткой входной строки от потенциально опасного кода. По
умолчанию включено (true). Можно отключить для доверенного
HTML:
<q-markup :value="trustedHtml" :sanitize="false" />
Использование sanitize: false рекомендуется только при
полной уверенности в источнике данных, чтобы избежать уязвимостей.
max-height и scrollable
Позволяют ограничить высоту блока и добавить скролл при переполнении
содержимого:
<q-markup
:value="htmlContent"
:max-height="300"
scrollable
/>
QMarkup автоматически отслеживает изменения свойства
value. Любое изменение строки приведет к обновлению
отображаемого HTML:
data() {
return {
htmlContent: "<p>Первый вариант текста</p>"
}
},
mounted() {
setTimeout(() => {
this.htmlContent = "<p>Обновленный текст с <strong>жирным выделением</strong></p>";
}, 3000);
}
Внутри QMarkup можно использовать локальные или глобальные
CSS-классы. Для этого применяется стандартный атрибут
class:
<q-markup
:value="htmlContent"
class="custom-markup"
/>
CSS:
.custom-markup h2 {
color: #4a90e2;
font-weight: 700;
}
.custom-markup p {
line-height: 1.6;
}
Также можно комбинировать с style для инлайнового
форматирования:
<q-markup
:value="htmlContent"
style="padding: 10px; background-color: #f5f5f5;"
/>
QMarkup может быть встроен в другие компоненты Quasar, например, QCard или QExpansionItem для отображения форматированного текста внутри карточек или выпадающих элементов:
<q-card>
<q-card-section>
<q-markup :value="htmlContent" />
</q-card-section>
</q-card>
При использовании с динамическими данными из API рекомендуется
включать sanitize для защиты от нежелательного кода:
<q-markup :value="apiResponse.content" :sanitize="true" />
QMarkup корректно отображает стандартные HTML-элементы: ссылки
(<a>), изображения (<img>), списки
(<ul>, <ol>), таблицы
(<table>). Примеры:
<q-markup :value="`<p>Ссылка: <a href='https://quasar.dev'>Quasar</a></p>
<img src='https://cdn.quasar.dev/logo/svg/quasar-logo.svg' width='50' />`" />
sanitize можно
отключить, но необходимо убедиться, что источники безопасны.Использование v-html в Vue позволяет отображать HTML, но
не обеспечивает автоматическую защиту от XSS, тогда как
QMarkup:
Пример:
<q-markup
:value="htmlContent"
@click.native="handleClick"
/>
QMarkup обеспечивает удобный и безопасный способ отображения HTML-разметки в приложениях на Quasar, позволяя динамически изменять контент, стилизовать его и интегрировать в интерфейс без риска для безопасности.