
Vue.js 2 Краткое руководство, 2017 г.
Это сообщение было впервые опубликовано на CodingTheSmartWay.com.
Что такое Vue.js
Vue - это прогрессивный JavaScript-фреймворк, ориентированный на создание пользовательских интерфейсов. Поскольку он работает только на «уровне представления», он не предполагает наличия промежуточного программного обеспечения и серверной части и, следовательно, может быть легко интегрирован в другие проекты и библиотеки. Vue.js предлагает множество функций для уровня представления и может использоваться для создания мощных одностраничных веб-приложений. Ниже вы можете найти список функций:
- Реактивные интерфейсы
- Декларативный рендеринг
- Связывание данных
- Директивы
- Логика шаблона
- Компоненты
- Обработка событий
- Вычисленные свойства
- CSS-переходы и анимация
- Фильтры
Ядро библиотеки Vue.js 2 очень мало (всего 17 КБ). Это гарантирует, что накладные расходы, которые добавляются к вашему проекту с помощью Vue.js, минимальны, а ваш веб-сайт загружается быстро.
Веб-сайт Vue.js доступен по адресу: https://vuejs.org/

Как использовать Vue.js
Есть разные способы включить Vue.js в ваш веб-проект:
- Используйте CDN, включив тег ‹script› в файл HTML
- Установить с помощью диспетчера пакетов узлов (NPM)
- Установить с помощью Bower
- Используйте Vue-cli для настройки вашего проекта
Далее мы перейдем к Vue-cli, чтобы настроить новый проект и установить библиотеку Vue.js 2.
Использование Vue-cli
Во-первых, нам нужно установить Vue-cli. Интерфейс commend доступен в виде пакета NPM. Убедитесь, что Node.js и команда npm доступны в вашей системе, и используйте следующую команду для глобальной установки Vue CLI в вашей локальной системе: $ npm install -g vue-cli
После установки клиент успешно, команда vue становится доступной. Теперь мы можем запустить проект с помощью этой команды следующим образом: $ vue init webpack vueapp01
Мы говорим vue инициировать новый проект и используйте шаблон webpack. Мы также даем проекту имя vueapp01. Выполнение команды вызывает несколько вопросов в командной строке, как вы можете видеть на следующем снимке экрана:

Проект создается в папке vueapp01. Перейдите в этот каталог с помощью следующей команды: $ cd vueapp01
Начните установку зависимостей, снова используя npm:
$ npm install
После завершения установки пакетов вы можете запустить веб-сервер в режиме разработки, используя npm следующим образом: $ npm run dev < br />
Это запустит сервер на порту 8080, и вывод приложения автоматически отобразится в браузере:

Позже, если вы захотите выполнить сборку для производства, вы можете вместо этого использовать следующую команду. В этом случае создается папка dist, содержащая файлы, необходимые для продуктивного развертывания. $ npm run build
Структура проекта
Давайте посмотрим на исходную структуру проекта, которая находится в папке vueapp01:

В корневой папке проекта находятся файлы и папки. Разберем самые важные из них. Файлы package.json содержат все зависимости вашего проекта. Используя команду npm install до того, как мы убедимся, что зависимости, перечисленные в package.json, установлены в папку node_modules проекта.
Файл index.html содержит следующий HTML-код:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>vueapp01</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
Этот файл является отправной точкой вашего приложения. Обратите внимание, что в разделе body доступен элемент <div>, для которого свойство id имеет значение string app. Этот элемент используется в качестве заполнителя для вывода, который генерируется Vue.js.
Затем посмотрите файл main.js в папке src. Это место, где инициализируется приложение Vue:
import Vue from 'vue'
import App from './App'
new Vue({
el: '#app',
template: '<App/>',
components: { App }
})
В верхней части файла вы можете найти два оператора импорта:
import Vue from 'vue': Vue - это основной класс фреймворка.import App from './App': Приложение - корневой компонент нашего приложения.
С помощью ключевого слова new создается новый экземпляр основного класса фреймворка Vue. Конструктор принимает объект в качестве параметра, который содержит три свойства:
el: назначая строку #app этому свойству, мы определяем, что вывод приложения Vue должен отображаться в элементе<div id="app"></div›в index.html.template: шаблон содержит HTML-код, который используется для генерации вывода приложения Vue.js.components: Список компонентов Vue.js, которые используются в шаблоне.
Шаблон состоит только из одного элемента: <App/>. Конечно, это не стандартный HTML-элемент. Это элемент, который назначается компоненту приложения. Чтобы иметь возможность использовать <App/> в шаблоне, компонент приложения также указан в объекте, который назначен свойству components.
Итак, давайте посмотрим, что находится внутри реализации компонента приложения в файле App.vue:
<template>
<div id="app">
<img src="./assets/logo.png">
<hello></hello>
</div>
</template>
<script>
import Hello from './components/Hello'
export default {
name: 'app',
components: {
Hello
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
Как и в каждом однофайловом компоненте Vue.js 2, реализация приложения разделена на три части:
<template></template>: Код шаблона компонента<script></script>: Код скрипта компонента<style></style>: CSS-код компонента
Давайте сосредоточимся на первых двух разделах template и script. В разделе сценария выполняется экспорт по умолчанию объекта, объявляющего компонент с именем app. Опять же, свойство components используется для объявления того, что приложению требуется другой компонент (Hello). Этот подкомпонент используется в коде шаблона приложения и реализован в файле hello.vue в папке components. Чтобы иметь возможность использовать компонент Hello в App, также необходимо включить соответствующий оператор импорта в верхней части раздела скрипта.
Реализация компонента Hello выглядит следующим образом:
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<ul>
<li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
<li><a href="https://gitter.im/vuejs/vue" target="_blank">Gitter Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
<br>
<li><a href="http://vuejs-templates.github.io/webpack/" target="_blank">Docs for This Template</a></li>
</ul>
<h2>Ecosystem</h2>
<ul>
<li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
<li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
<li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
</ul>
</div>
</template>
<script>
export default {
name: 'hello',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
Объект конфигурации компонента экспортируется по умолчанию. На этот раз объект конфигурации компонента содержит метод data. Этот метод возвращает объект, представляющий модель компонента. Свойства, определенные в объекте модели, можно использовать в шаблоне компонента с помощью синтаксиса интерполяции. В приведенном выше примере объект модели имеет только одно свойство: msg. Строка, присвоенная этому свойству, включается в шаблон компонента с помощью: <h1>{{ msg }}</h1>
Синтаксис интерполяции требует двойных фигурных скобок для включения данных модели в шаблон.
Использование стандартных директив
Давайте адаптируем реализацию компонента Hello, чтобы узнать больше об использовании стандартных директив Vue.js.
v-для
Директива v-for позволяет отрисовывать элемент несколько раз на основе исходных данных. Вы можете использовать эту директиву для перебора массива и данных массива для вывода. Сначала добавьте массив к объекту, который возвращается методом data:
users: [
{firstname: 'Sebastian', lastname: 'Eschweiler'},
{firstname: 'Bill', lastname: 'Smith'},
{firstname: 'John', lastname: 'Porter'}
],
Затем используйте директиву v-for, чтобы включить список в вывод, выводящий значение firstname и lastname каждого элемента массива:
<div>
<ul>
<li v-for="user in users">
{{user.firstname}} {{user.lastname}}
</li>
</ul>
</div>
v-модель
Директива v-model создает двустороннюю привязку к входному элементу или компоненту. Обязательно определите свойство в вашем объекте данных, которое следует использовать в качестве цели привязки:
input_val: ''
Затем используйте директиву для привязки значения входного элемента к этому свойству:
<div>
<input type="text" v-model="input_val">
</div>
Установив эту привязку, мы получаем два эффекта:
- каждый раз, когда пользователь вводит значение в поле ввода, значение input_val соответственно обновляется.
- Если мы изменим значение input_val в нашей программе, значение, которое отображается в элементе ввода, также обновится.
v-текст
С помощью директивы v-text устанавливается текстовое содержимое элемента. Мы можем использовать его как альтернативу синтаксису {{…}}, если необходимо установить полное текстовое содержимое. Например. мы можем использовать эту директиву для вывода значения input_val пользователю:
Input Value: <span v-text="input_val"></span>
Резюме
Полный код адаптированной реализации компонента Hello теперь должен выглядеть следующим образом:
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<hr />
<div>
<ul>
<li v-for="user in users">
{{user.firstname}} {{user.lastname}}
</li>
</ul>
</div>
<hr />
<div>
<input type="text" v-model="input_val">
</div>
<div>
Input Value: <span v-text="input_val"></span>
</div>
<hr />
<div>
<button class="btn btn-primary" v-on:click="counter++">You've clicked this button {{counter}} times!</button>
</div>
</div>
</template>
<script>
export default {
name: 'hello',
data () {
return {
msg: 'Welcome to Your Vue.js App',
users: [
{firstname: 'Sebastian', lastname: 'Eschweiler'},
{firstname: 'Bill', lastname: 'Smith'},
{firstname: 'John', lastname: 'Porter'}
],
input_val: '',
counter: 0
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-position: inside;
}
a {
color: #42b983;
}
</style>
Результат можно увидеть на следующем скриншоте:

Видеоурок
Этот видеоурок содержит шаги, описанные в тексте выше:
Это сообщение было впервые опубликовано на CodingTheSmartWay.com.