Разбираем основные директивы Vue.js

Директивы 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 приложение. Надеюсь материал был полезен для вас.

Cody Maverick: