Обзор базовых возможностей Vue.js
Vue (произносится /vjuː/, примерно как view) — это прогрессивный фреймворк для создания пользовательских интерфейсов
<div id="app">{{ message }}</div>
<script src="https://unpkg.com/vue"></script>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
}
});
</script>
Основными концепциями Vue являются:
Работа с Vue.js начинается с создания нового инстанса new Vue.
new Vue({
el: '#app',
template: `{{ message }}`,
data: {},
computed: {}
methods: {}
});
Render
-функция получает первым аргументом метод
createElement
, нужный для создания
VNode
-ов.render
.
Директивы — специальные атрибуты для добавления элементам html дополнительной функциональности.
Динамически связывает атрибуты тега или входной параметр компонента с выражением
<img v-bind:src="imageSrc">
<img :src="imageSrc">
<img :src="'/path/to/images/' + fileName">
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :style="{ fontSize: size + 'px' }"></div>
<div v-bind="{ id: someProp, 'other-attr': prop2 }"></div>
<my-component :prop="someThing"></my-component>
<child-component v-bind="$props"></child-component>
Циклично проходит массив объектов
<div v-for="item in items" :key="item.id">
{{ item.text }}
</div>
<div v-for="(item, index) in items"></div>
<div v-for="(val, key) in object"></div>
<div v-for="(val, key, index) in object"></div>
Cвязывает слушателя события с элементом
<button v-on:click="doThis"></button>
<button v-on:click="doThat('hello', $event)"></button>
<button @click="doThis"></button>
<button @click.stop="doThis"></button>
<button @click.prevent="doThis"></button>
<input @keyup.enter="onEnter">
Двусторонним образом связывает элемент ввода данных или компонент с переменной, только для input, select, textarea, компонентов
<input v-model="message" placeholder="Отредактируй меня">
<p>Введённое сообщение: {{ message }}</p>
<div v-if="type === 'A'">
A
</div>
<div v-else-if="type === 'B'">
B
</div>
<div v-else-if="type === 'C'">
C
</div>
<div v-else>
Не A/B/C
</div>
v-html
- Управляет HTML-содержимым элемента (innerHTML).
v-text
- обновляет textContent элементаv-show
- переключает видимость элемента, изменяя свойство CSS display
v-cloak
- прячет «усатые» выражения, пока не подтянулись данные
v-once
- рендерит элемент только вначале и больше не следит за нимv-pre
- не компилирует элемент и его дочерние элементыКомпоненты помогают расширить основные html элементы и внедрить переиспользуемый код. Компоненты — это переиспользуемые экземпляры Vue со своим именем
Поскольку компоненты это переиспользуемые экземпляры Vue, они принимают те же опции что и new Vue, такие как data, computed, watch, methods, и хуки жизненного цикла. Единственными исключениями являются несколько специфичных для корневого экземпляра опций, например el.
Обычно приложение организуется в виде дерева вложенных компонентов:
data
должно быть функциейЧтобы использовать компоненты в шаблонах, они должны быть зарегистрированы. Есть два типа регистрации компонентов: глобальная и локальная.
Vue.component('my-component-name', {});
new Vue({
components: {
"my-component-name": function() {}
}
});
Как и с обычными HTML-элементами, часто бывает полезным передать компоненту содержимое, например:
<Alert>
Произошло что-то плохое.
</Alert>
Vue.component('alert-box', {
template: `
<div class="demo-alert-box">
<strong>Ошибка!</strong>
<slot></slot>
</div>
`});
Бывают случаи, когда полезно иметь несколько слотов:
<div class="page">
<header class="page__header">
<slot name="header" />
</header>
<main class="page__main">
<slot />
</main>
<footer class="page__footer">
<slot name="footer" />
</footer>
</div>
<Page>
<template slot="header">
<h1>Здесь мог быть заголовок страницы</h1>
</template>
<p>Параграф для основного контента.</p>
<p>И ещё один.</p>
<p slot="footer">Некая контактная информация</p>
</Page>
Vue располагает компонентом-обёрткой transition, позволяющим анимировать появление и исчезновение элемента или компонента в следующих случаях:
<transition name="fade">
<p v-if="show">привет</p>
</transition>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
</style>
Иногда бывает полезно динамически переключаться между компонентами, например в интерфейсе с вкладками
<!--
Компонент меняется при изменении
currentTabComponent
-->
<component v-bind:is="currentTabComponent" />
Для распространённых задач форматирования текста во Vue используются фильтры
<!-- mustache -->
{{ message | capitalize }}
<!-- v-bind -->
<div v-bind:id="rawId | formatId"></div>
new Vue({
filters: {
capitalize(value) {}
}
});
Vue.filter("capitalize", function (value) {});
vue-router
- официальный простой и мощный роутер
vuex
- централизованное хранилище состояния приложения
vuex-router-sync
- дружит vuex и vue-router
vue-i18n
- интернациализация
vue-cli
- генератор приложенияvue-loader
- официальный лоадер для webpack
vue-devtools
- расширение для браузера упрощающее отладку
vetur
- плагин для Visual Studio Code