Директива v-cloak в Vue3
v-cloakДиректива используется, чтобы скрывать некомпилированные шаблоны до готовности экземпляра компонента.
Базовое объяснение
v-cloakДиректива используется для решения проблемы «вспышки некомпилированного шаблона» при использовании DOM-шаблонов. Когда пользователи заходят на страницу, они могут увидеть необработанные{{ }}mustache-теги, пока компонент Vue не смонтируется и не отрисует содержимое.
v-cloakОна остаётся на элементе, пока связанный экземпляр компонента не смонтирован. В сочетании с правилами CSS она может скрывать необработанный шаблон в течение этого периода.
- Ожидаемый тип: отсутствует (не принимает выражения)
- Назначение: скрывает некомпилированные шаблоны до готовности компонента.
Примечание: эта директива нужна только в конфигурациях без этапа сборки.
Базовое использование
При использованииv-cloak, нужно сочетать её с CSS-правилами:
Пример
[v-cloak] {
display: none;
}
Пример
{{ message }}
</div>
Когда компиляция завершена,v-cloakатрибут автоматически удаляется из элемента, и элемент отображается.
Сценарии использования
v-cloakВ основном используется в следующих сценариях:
1. Импорт Vue с помощью CDN
При импорте Vue через CDN без этапа сборки в течение короткого периода между загрузкой страницы и скриптом Vue шаблон может быть ещё не скомпилирован:
Пример
<html>
<head>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="app">
<div v-cloak>
{{ message }}
</div>
</div>
<script>
const { createApp } = Vue
createApp({
data() {
return {
message: 'Hello Vue!'
}
}
}).mount('#app')
</script>
</body>
</html>
2. Сложные структуры шаблонов
Для сложных шаблонов с множеством привязок данных v-cloak не позволяет пользователям видеть неотрендеренное содержимое:
Пример
<h1>{{ title }}</h1>
<p>Добро пожаловать, {{ username }}</p>
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
Как работает v-cloak
- Когда страница загружается, Vue ещё не инициализирован, и
v-cloakатрибут присутствует на элементе. - Правила CSS
[v-cloak] { display: none; }скрывают эти элементы. - Vue инициализируется и компилирует шаблон, создавая реактивные данные.
- После монтирования компонента Vue автоматически удаляет
v-cloakатрибута. - Элементы становятся видимыми, отображая отрендеренное содержимое.
Примечания
Только для сценариев без этапа сборки: При использовании инструментов сборки (таких как Vite, Webpack) шаблон уже скомпилирован на этапе сборки, поэтому v-cloak не нужен.
Пример
/* Рекомендуется размещать CSS в head */
<head>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
Нужно использовать вместе с CSS: сам v-cloak не скрывает содержимое; его необходимо сочетать с правилами CSS, чтобы он возымел эффект.
Отличия от современных инструментов сборки
При использовании современных инструментов сборки (таких как Vite) v-cloak не нужен, потому что:
- Шаблон предварительно компилируется на этапе сборки
- JavaScript встраивается в документ или загружается асинхронно после сборки бандла
- Исходный HTML не содержит нескомпилированного синтаксиса шаблона
Поэтому v-cloak в основном используется при традиционном подключении через CDN или в простых сценариях с HTML-страницами.
Другие расширения
Встроенные директивы Vue3