Vue - это веб-фреймворк для разработки пользовательских интерфейсов на языке программирования JavaScript. Vue создан для постепенного внедрения в существующее приложение. Он решает различные задачи уровня представления (view), упрощает работу с другими библиотеками и позволяет создавать сложные одностраничные приложения (SPA, Single-Page Applications).

Для работы с фреймворком, вам уже нужно знать HTML, CSS и конечно же JavaScript хотя бы на базовом уровне.

Разбиение приложения на компоненты

Vue позволяет разделять весь код приложения на компоненты и собирать их в единое приложение. Компоненты можно использовать повторно в любых других приложениях.

Компонент - это экземпляр Vue с предустановленными опциями. Создать компонент можно следующим образом:

Vue.component('todo-item', {
  template: '<li>Это todo</li>'
})

В примере мы объявили новый компонент под названием todo-item. Этот компонент можно использовать в шаблоне другого компонента:

<ul>
  <!-- создание экземпляра компонента todo-item -->
  <todo-item></todo-item>
</ul>

Чтобы можно было передавать различные данные от родителя в дочерние компоненты, нужно добавить возможность указания входного параметра:

Vue.component('todo-item', {
  props: ['todo'],
  template: '<li>{{ todo.text }}</li>'
})

Свойство props принимает пользовательский параметр todo.

Декларативный рендеринг

Vue позволяет декларативно отображать данных в DOM с помощью простых шаблонов:

<div id="app">
  {{ message }}
</div>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

 Это самый простой пример работы Vue.js. Чтобы изменить текст, просто откройте консоль браузера и выполните app.message присвоив ему новое значение. Вместо Hello Vue! динамически отобразится новый текст.

Вот мы и создали наше первое Vue-приложение! Выглядит похоже на простой рендеринг шаблона, но “под капотом” Vue выполнил немало работы. Данные и DOM теперь реактивно связаны. Как это проверить? Просто откройте консоль JavaScript в своём браузере (прямо здесь, на этой странице), и задайте полю app.message другое значение. Вы тут же увидите соответствующее изменение в окне браузера.
Vue.js позволяет связывать атрибуты элементов:

<div id="app-2">
  <span v-bind:title="message">
    Наведите сюда курсор мыши на этот текст и отобразится дата в элементе tiitle.
  </span>
</div>
var app2 = new Vue({
  el: '#app-2',
  data: {
    message: 'Страница загружена в: ' + new Date().toLocaleString()
  }
})

Атрибут v-bind  в данном коде называется - директивой. Директивы начинаются с префикса v- и применяют особое поведение в Vue.

Условия и циклы

В Vue простоые условия, которые позволяют управлять элементами в DOM:

<div id="app-3">
  <span v-if="seen">Сейчас меня видно</span>
</div>
var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})

Чтобы скрыть текст, нужно ввести в консоли:

app3.seen = false

Для отображения списков используя данные из массива нужно использовать директиву v-for:

<div id="app-4">
  <ol>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>
  </ol>
</div>
var app4 = new Vue({
  el: '#app-4',
  data: {
    todos: [
      { text: 'Первый пункт' },
      { text: 'Второй пункт' },
      { text: 'Третий пункт' }
    ]
  }
})

Чтобы добавить новый элемент в массив, нужно выполнить в консоли:

app4.todos.push({ text: 'Новый элемент' })

Пользовательский ввод

Для работы с событиями в приложении, используйте директиву v-on, указав метод-обработчик:

<div id="app-5">
  <p>{{ message }}</p>
  <button v-on:click="reverseMessage">Обратить порядок букв в сообщении</button>
</div>
var app5 = new Vue({
  el: '#app-5',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

Директива v-model позволяет связывать элементы формы и состояние приложения:

<div id="app-6">
  <p>{{ message }}</p>
  <input v-model="message">
</div>
var app6 = new Vue({
  el: '#app-6',
  data: {
    message: 'Hello Vue!'
  }
})