Ряд директив позволяет по условию изменять структуру DOM, и одной из таких является директива v-if. Она позволяет отобразить или скрыть элемент html по условию. Например:
<!DOCTYPE html> <html> <head> <title>Изучаем Vue.js</title> <meta charset="utf-8" /> </head> <body> <div id="app"> <p v-if="visible">Первый параграф</p> <p>Второй параграф</p> <button v-on:click="visible=!visible">{{visible?'Скрыть':'Показать'}}</button> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { visible: true } }); </script> </body> </html>
Директива v-if
в качестве параметра принимает условие, которое возвращает значение true или false. Если true, то элемент, к
которому применяется директива v-if, отображается. Если false, то, наоборот, скрывается. В данном примере это значение определено в свойстве visible.
С помощью кнопки в примере выше мы можем изменить значение свойства visible и соответственно отобразить или скрыть элемент.
В паре с директивой v-if может использоваться директива v-else, которая позволяет отобразить другой элемент, если условие в директиве v-if равно false:
<div id="app"> <p v-if="visible">Первый параграф</p> <p v-else>Второй параграф</p> <button v-on:click="visible=!visible">{{visible?'К параграфу 2':'К параграфу 1'}}</button> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { visible: true } }); </script>
В данном случае, если условие, которое представляет свойство visible, равно true, то отображается первый параграф. Если условие возвращает false, то отображается второй параграф.
Так как выражение v-if является директивой, то оно может применяться только к одному элементу. Но что если мы хотим применить ее к группе элементов? В этом случае мы можем применить v-if для элемента <template>, который выступает в качестве обертки для группы элементов:
<div id="app"> <template v-if="visible"> <h1>Заголовок 1</h1> <p>Параграф 1</p> </template> <template v-else> <h1>Заголовок 2</h1> <p>Параграф 2</p> </template> <button v-on:click="visible=!visible">{{visible?'К параграфу 2':'К параграфу 1'}}</button> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { visible: true } }); </script>
С помощью директивы v-else-if к v-if можно добавить обработку дополнительных условий. Например, в зависимости от введенного числа необходимо отображать тот или иной элемент:
<div id="app"> <input type="number" v-model="number" /> <p v-if="number==1">Один</p> <p v-else-if="number==2">Два</p> <p v-else-if="number>2 && number<7">Несколько</p> <p v-else>Много</p> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { number: 1 } }); </script>
Аналогично можно использовать v-else-if вместе с template:
<template v-if="number==1"> <p>Один</p> </template> <template v-else-if="number==2"> <p>Два</p> </template> <template v-else-if="number>2 && number<7"> <p>Несколько</p> </template> <template v-else> <p>Много</p> </template>