Директивы Vue.js это специальные атрибуты, которые мы можем использовать внутри html шаблона компонента vue, для того чтобы тем или иным образом взаимодействовать с html тегами и не только. Все директивы обычно начинаются с буквы v, затем через дефис идет название директивы. В статье мы разберем основные директивы, которые вы будете наиболее часто использовать в вашем Vue приложении.
v-show
Данная директива отвечает за отображение элемента в зависимости от переданного значения. Если мы передадим в значение true, то элемент отобразится на странице и наоборот.
<template> <h1 v-show="true">Это заголовок</h1> </template>
Так же мы можем передать в значение директивы функцию или метод, который будет возвращать булево значение.
<template>
<h1 v-show="showTitle(3)">Это заголовок</h1>
</template>
<script>
export default {
name: 'App',
data() {
},
methods: {
showTitle(num) {
return num > 0
}
}
}
</script> В данном случае если мы передадим в метод showTitle число > 0, то заголовок будет отображаться, если отрицательное, то нет.
v-if
Эта директива так же как и v-show отвечает за условную отрисовку элементов, с той лишь разницей, что при использовании v-show элемент всегда будет оставаться в DOM и будет меняться только значение css свойcтва display. Если вы управляете видимостью элемента через v-if, то ваш элемент будет пропадать и появляться в DOM дереве в зависимости от значения директивы. v-if принимает значения по аналогии с v-show.
<template>
<h1 v-if="showTitle(3)">Это заголовок</h1>
</template>
<script>
export default {
name: 'App',
methods: {
showTitle(num) {
return num > 0
}
}
}
</script> v-else, v-else-if
Директива v-if удобна тем, что её можно использовать вместе с директивами v-else и v-else-if. В зависимости от значений будет отображаться тот или иной компонент. В примере ниже отрисуется третий заголовок.
<template>
<h1 v-if="showTitle(-2)">Это заголовок</h1>
<h1 v-else-if="showTitle(-3)">Это заголовок 2</h1>
<h1 v-else>Это заголовок 3</h1>
</template>
<script>
export default {
name: 'App',
data() {
},
methods: {
showTitle(num) {
return num > 0
}
}
}
</script> v-bind
Директива служит для так называемой data binding — привязки данных. Для того чтобы осуществить вывод динамических данных внутри html атрибута необходимо передать аргументом директиве v-bind этот атрибут. Аргументы к директивам передаются после символа двоеточие. Например: v-bind:href. В примере кода мы привязали значение переменной url к атрибуту href.
<template>
<а class="link" v-bind:href="urlToGoogle">Google</а>
</template>
<script>
export default {
name: 'App',
data() {
return {
urlToGoogle: 'https://www.google.com/'
}
}
}
</script> v-model
Директива несколько похожа на v-bind и служит для двухсторонней привязки между данными элементами формы и данными из объекта data (two-way binding). Директива игнорирует атрибуты value, checked, selected, которые присутствуют у элементов. За истинное значение директива берет данные, которые мы передаём ей из объекта data. В примере ниже мы привязали значение инпута к переменной inputText в объекте дата экземпляра vue. При вводе данных значение из инпута будет автоматически записываться в переменную inputText.
<template>
<input type="text" v-model="inputText">
</template>
<script>
export default {
name: 'App',
data() {
return {
inputText: ''
}
}
}
</script> v-on
Добавление события на элемент реализуется директивой v-on. Аргументом директивы после двоеточия нужно передать название события. Названия событий аналогичны событиям JavaScript. В примере мы навесили обработчик события click, на кнопку, которая увеличивает переменную counter на единицу.
<template>
<div class="counter">{{counter}}</div>
<button v-on:click="increaseCounter">+1</button>
</template>
<script>
export default {
name: 'App',
data() {
return {
counter: 0
}
},
methods: {
increaseCounter: function () {
return this.counter++;
}
}
}
</script> Так же с версии vue 2.4.0 доступна возможность навесить сразу несколько событий на элемент.
<button v-on="{ mousedown: doThis, mouseup: doThat }"></button> v-for
Для того чтобы вывести данные массива в список элементов существует директива v-for. Она имеет следующий синтаксис — v-for=»item in items». В значение директивы мы передаем итерируемый элемент (в нашем случае это item) и массив, который мы будем обходить (items). Далее в теле тега мы уже можем обращаться к итерируемому элементу.
<template>
<ul class="students">
<li v-for="student in students">{{student}}</li>
</ul>
</template>
<script>
export default {
name: 'App',
data() {
return {
students: [
'Alex',
'Robert',
'Marta'
]
}
}
}
</script> Данный код выведет следующий результат:
- Alex
- Robert
- Marta
v-html
С помощью данной директивы по аналогии с innerHTML можно устанавливать html разметку внутрь данного элемента.
<template>
<div v-html="code"></div>
</template>
<script>
export default {
name: 'App',
data() {
return {
code: '<i>Hello</i> <small>World</small>!'
}
}
}
</script>
Заключение
В статье мы познакомились с основными директивами Vue.js , без которых не обходится ни одно Vue приложение. Надеюсь материал был полезен для вас.