Директива v-show используется для управления видимостью
элемента на странице. В отличие от v-if, который полностью
добавляет или удаляет элемент из DOM, v-show оставляет
элемент в DOM, меняя только его CSS-свойство display. Это
позволяет эффективно переключать видимость без повторного создания и
разрушения элементов, что особенно полезно для элементов с тяжелой
разметкой или сложной логикой.
Синтаксис директивы прост:
<div v-show="isVisible">Этот блок видим только когда isVisible = true</div>
В данном примере isVisible — это реактивное свойство,
которое управляет видимостью блока. Если isVisible равно
true, элемент отображается; если false —
скрывается через display: none.
Petite-Vue позволяет создавать реактивные объекты с помощью функции
createApp и декларации данных:
<div v-scope="{ isVisible: true }">
<button @click="isVisible = !isVisible">Переключить видимость</button>
<p v-show="isVisible">Текст видим или скрыт по клику</p>
</div>
Здесь v-scope создаёт локальную область видимости для
реактивных свойств. Кнопка переключает значение isVisible,
и элемент <p> автоматически обновляет своё
состояние.
v-show.display: none, поэтому все
слушатели событий и состояния внутри элемента сохраняются.v-show можно комбинировать с логическими выражениями для
более сложного управления видимостью:
<p v-show="user.isLoggedIn && user.hasAccess">
Содержимое доступно только авторизованным пользователям с правами доступа
</p>
Любое выражение, возвращающее булево значение, может использоваться в директиве.
Директива v-show совместима с динамическими классами и
стилями:
<p v-show="isVisible" :class="{ 'highlight': isHighlighted }" :style="{ color: textColor }">
Стили и видимость управляются одновременно
</p>
Даже если элемент скрыт, его классы и стили остаются применёнными в DOM, что может быть полезно для анимаций и переходов.
v-show для часто переключаемых элементов,
где важно сохранять состояние и производительность.v-if, чтобы не
держать скрытые элементы в DOM.v-show идеально подходит для вкладок, модальных окон,
выпадающих списков и других UI-элементов, которые часто показываются и
скрываются.Petite-Vue не предоставляет встроенные директивы анимации, но
v-show легко сочетается с CSS-переходами:
<div v-scope="{ isVisible: false }">
<button @click="isVisible = !isVisible">Показать/Скрыть</button>
<div v-show="isVisible" class="fade">Контент с плавным появлением</div>
</div>
<style>
.fade {
transition: opacity 0.3s ease;
opacity: 1;
}
.fade[style*="display: none"] {
opacity: 0;
}
</style>
В этом примере изменение display инициирует плавное
скрытие и показ элемента через CSS-переход.
v-show и
v-if| Характеристика | v-show | v-if |
|---|---|---|
| Пересоздание DOM | Нет | Да |
| Производительность | Лучше при частых изменениях | Лучше при редких изменениях |
| Состояние элементов | Сохраняется | Сбрасывается |
| CSS-анимации | Простое использование | Требует дополнительных приёмов |
Использование v-show позволяет эффективно управлять
видимостью элементов в интерфейсе без лишней нагрузки на DOM и без
потери внутреннего состояния компонентов.