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.