В Vue.js условная отрисовка позволяет управлять отображением
элементов на странице в зависимости от состояния приложения. Основными
директивами для этого являются v-if,
v-else-if, v-else и v-show.
Каждая из них имеет свои особенности и применяется в разных
ситуациях.
v-ifv-if полностью добавляет или удаляет элемент из DOM в
зависимости от булевого выражения. Если условие истинно, элемент
создаётся и добавляется в DOM; если ложно — удаляется.
<template>
<div>
<p v-if="isLoggedIn">Добро пожаловать, пользователь!</p>
</div>
</template>
<script>
export default {
data() {
return {
isLoggedIn: true
};
}
};
</script>
Особенности v-if:
v-else и
v-else-ifДля реализации цепочек условий используют v-else-if и
v-else. Они должны идти сразу после элемента с
v-if или другого v-else-if.
<template>
<div>
<p v-if="status === 'loading'">Загрузка данных...</p>
<p v-else-if="status === 'error'">Произошла ошибка</p>
<p v-else>Данные загружены</p>
</div>
</template>
<script>
export default {
data() {
return {
status: 'loading'
};
}
};
</script>
Ключевые моменты:
v-else-if проверяет дополнительное условие, если
предыдущее v-if ложно.v-else не имеет условия и выполняется, если все
предыдущие условия ложны.v-if и v-else не должно быть других
элементов.v-showv-show управляет видимостью элемента с помощью
CSS-свойства display. Элемент всегда присутствует в DOM, но
скрывается или отображается в зависимости от условия.
<template>
<div>
<p v-show="isVisible">Этот текст можно скрыть</p>
<button @click="toggle">Переключить видимость</button>
</div>
</template>
<script>
export default {
data() {
return {
isVisible: true
};
},
methods: {
toggle() {
this.isVisible = !this.isVisible;
}
}
};
</script>
Сравнение с v-if:
v-show более эффективен при частом переключении
видимости.v-if и v-showv-if применяется для редкой отрисовки и
сложных элементов, где нужно экономить ресурсы, так как элементы
удаляются из DOM.
v-show эффективен для элементов с
частыми изменениями видимости, например, вкладок или модальных окон, где
DOM-структура должна оставаться стабильной.
В Vue.js можно комбинировать v-if и v-for,
но следует учитывать порядок:
<template>
<ul>
<li v-for="item in items" :key="item.id" v-if="item.visible">
{{ item.name }}
</li>
</ul>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: 'Элемент 1', visible: true },
{ id: 2, name: 'Элемент 2', visible: false },
{ id: 3, name: 'Элемент 3', visible: true }
]
};
}
};
</script>
Рекомендации:
v-if внутри v-for выполняется для каждого
элемента, что может повлиять на производительность при большом
количестве элементов.v-show для уменьшения нагрузки на DOM.Условия можно вычислять прямо в шаблоне или через вычисляемые свойства:
<template>
<p v-if="isAdmin">Администраторский доступ</p>
</template>
<script>
export default {
data() {
return {
userRole: 'admin'
};
},
computed: {
isAdmin() {
return this.userRole === 'admin';
}
}
};
</script>
Преимущества:
v-if для редких изменений и тяжелых
элементов.v-show для частого переключения
видимости.v-else-if и v-else обеспечивают
структурированные цепочки условий.v-for, чтобы не снижать
производительность.Эффективное применение этих директив позволяет создавать динамичные и отзывчивые интерфейсы, оптимизируя работу с DOM и управляя визуальными состояниями компонентов.