Условия
v-if
Принимает:
any
Осуществляет отрисовку элемента, только если передаваемое выражение истинно. При изменении значения выражения на противоположное, элемент и содержащиеся в нём компоненты и директивы уничтожаются/пересоздаются. Если элемент — <template>
, вместо него будет отрисовано его содержимое.
Эта директива также запускает анимационные переходы при изменении условия.
Директива v-if
используется для рендеринга блока по условию. Блок будет отображаться только в том случае, если выражение директивы возвращает значение, приводимое к true
.
Также можно добавить блок «иначе», используя директиву v-else
:
При совместном использовании v-if
и v-for
, v-for
имеет более высокий приоритет
Условные группы с использованием v-if
и <template>
v-if
и <template>
Поскольку v-if
— директива, она должна быть указана в одном конкретном теге. Если нужно управлять отображением сразу нескольких элементов, то можно применить v-if
к псевдоэлементу <template>
, который служит невидимой обёрткой и сам в результатах отрисовки не появляется.
v-else
Не принимает какое-либо выражение
Ограничение: предыдущий элемент должен иметь директиву
v-if
илиv-else-if
.
Определяет «блок else» для v-if
или цепочки v-if
/v-else-if
.
Для указания блока «иначе» для v-if
можно использовать директиву v-else
:
Элемент с директивой v-else
должен следовать сразу за элементом с директивой v-if
или v-else-if
, иначе он не будет распознан.
v-else-if
Принимает:
any
Ограничение: предшествующий элемент должен иметь
v-if
илиv-else-if
.
v-else-if
служит в качестве блока «else if» для директивы v-if
. Можно объединять эти директивы в длинные цепочки:
v-show
Принимает:
any
Переключает CSS-свойство display
элемента, в зависимости от того, истинно ли указанное выражение.
Ещё одну возможность условного отображения предоставляет директива v-show
. Используется она так же:
Разница в том, что элемент с v-show
будет всегда оставаться в DOM, а изменяться будет лишь свойство display
в его параметрах CSS.
v-show
не работает на элементе <template>
и не работает с v-else
.
v-if
в сравнении с v-show
v-if
в сравнении с v-show
v-if
производит «настоящую» условную отрисовку, удостоверяясь что подписчики событий и дочерние компоненты внутри блока должным образом уничтожаются и воссоздаются при изменении истинности управляющего условия.
v-if
ленивый: если условие ложно на момент первоначальной отрисовки, он не произведёт никаких действий — условный блок не будет отображён, пока условие не станет истинным.
v-show
, напротив, куда проще: элемент всегда присутствует в DOM, и только CSS-свойство переключается в зависимости от условия.
В целом, у v-if
выше затраты на переключения, а у v-show
больше затрат на первичную отрисовку. Так что если вы предполагаете, что переключения будут частыми, используйте v-show
, если же редкими или маловероятными — v-if
.
Last updated