vue2_rus

API

Глобальные параметры

Vue.config — это объект, содержащий глобальные параметры Vue. Перед загрузкой приложения можно изменить следующие свойства:

silent

optionMergeStrategies

Функция слияния получает значения настроек родительского и дочернего элемента первым и вторым аргументами соответственно. Третьим аргументом передаётся контекст действующего экземпляра Vue.

devtools

Определяет, должен ли Vue разрешать vue-devtools проводить исследование. Значение по умолчанию для разработки — true, для продуктива — false. Установите true, чтобы vue-devtools работали и в продуктиве.

errorHandler

warnHandler

Добавлено в версии 2.4.0+

ignoredElements

keyCodes

performance

Добавлено в версии 2.2.0+

productionTip

Добавлено в версии 2.2.0+

Глобальный API

Vue.extend( options )

Создаёт «подкласс» базового конструктора Vue. Принимает параметром объект с настройками нового компонента. Внимание: у объекта, передаваемого в Vue.extend(), свойство data должно быть функцией.

  <div id="mount-point"></div>
  // Создание конструктора
  var Profile = Vue.extend({
    template: '<p>{{firstName}} {{lastName}}, также известный как {{alias}}</p>',
    data: function () {
      return {
        firstName: 'Уолтер',
        lastName: 'Уайт',
        alias: 'Гейзенберг'
      }
    }
  })
  // создаёт экземпляр Profile и монтирует его к элементу DOM
  new Profile().$mount('#mount-point')

Результатом будет:

  <p>Уолтер Уайт, также известный как Гейзенберг</p>

Vue.nextTick( [callback, context] )

Вызов функции callback при следующем цикле обновления DOM. Используйте для работы с обновлённым DOM после изменения данных.

  // изменение данных
  vm.msg = 'Привет'
  // DOM ещё не обновлён
  Vue.nextTick(function () {
    // теперь DOM обновлён
  })

  // использование с Promise (добавлено в 2.1.0+, см. примечание ниже)
  Vue.nextTick()
    .then(function () {
      // DOM обновлён
    })

Добавлено в версии 2.1.0+: функция возвращает Promise, когда не указан обратновызов и они поддерживаются окружением. Обратите внимание, Vue не поставляется с модернизатором для Promise. Если требуется поддержка обозревателей, которые не поддерживают их родным способом (например, IE), необходимо предоставить модернизатор самостоятельно.

Vue.set( target, propertyName/index, value )

Добавление свойства к реактивному объекту, гарантируя, что новое свойство также будет реактивным и будет вызвано обновление представления. Это пригодится для добавления новых свойств к реактивным объектам, поскольку иначе Vue не может отследить эти изменения (например, this.myObject.newProperty = 'hi').

Обратите внимание, объект не может быть экземпляром Vue или корневым объектом данных экземпляра Vue.

Vue.delete( target, propertyName/index )

Удаление поля. Для реактивного объекта будет вызвано обновление шаблона. Необходим, потому что Vue не может отследить неявное удаление полей (но вам редко когда это понадобится).

Объект target не может быть экземпляром Vue, или корневым объектом данных экземпляра Vue.

Vue.directive( id, [definition] )

Vue.filter( id, [definition] )

Vue.component( id, [definition] )

Vue.use( plugin )

Устанавливает добавку Vue.js. Если добавка — объект, у него должен быть публичный метод install. Если добавка — функция, она будет воспринята как метод install. Этот метод будет выполнен с Vue в качестве аргумента. Этот метод необходимо вызывать перед new Vue(). Добавка устанавливается только один раз, независимо от числа вызовов этого метода с одной и той же добавкой.

Vue.mixin( mixin )

Применяет примесь ко всем созданным впоследствии экземплярам Vue. Таким образом авторы добавок могут встраивать желаемое поведение во все компоненты. Не рекомендуется использовать в коде приложений.

Vue.compile( template )

  var res = Vue.compile('<div><span>{{ msg }}</span></div>')

  new Vue({
    data: {
      msg: 'hello'
    },
    render: res.render,
    staticRenderFns: res.staticRenderFns
  })

Vue.observable( object )

Добавлено в версии 2.6.0+

Создание реактивного объекта. Внутренне Vue реализует подобное для объекта, возвращаемого функцией data. Возвращаемый объект можно использовать внутри рисующих-функций и вычисляемых свойств, а при его изменениях будут вызываться соответствующие обновления. Также его можно использовать как небольшое межкомпонентное хранилище для простых сценариев:

  const state = Vue.observable({ count: 0 })
   const Demo = {
    render(h) {
      return h('button', {
        on: { click: () => { state.count++ }}
      }, `счётчик — ${state.count}`)
    }
  }

В версии Vue 2.x, Vue.observable напрямую изменяет передаваемый ему объект, поэтому он равен возвращаемому объекту, как продемонстрировано здесь. В Vue 3.x уже будет возвращаться реактивный прокси, оставляя исходный объект нереактивным при изменениях напрямую. Поэтому, для будущей совместимости, рекомендуем всегда работать с объектом, возвращаемым Vue.observable, а не с объектом переданным ему изначально.

Vue.version

Настройки — данные

data

Объект с данными экземпляра Vue. Vue рекурсивно преобразует его свойства в читатели/установщики, чтобы сделать их «реактивными». Объект должен быть простым: Vue проигнорирует свойства прототипа и родные объекты, например, из API обозревателя. Прежде всего, данные должны быть просто данными — не рекомендуется передавать объекты со своим собственным поведением.

Добавлять реактивные свойства к корневому объекту данных после инициализации нельзя. Определяйте все корневые реактивные свойства до создания экземпляра.

После создания экземпляра, объект с данными доступен через vm.$data. Экземпляр Vue также прокидывает все свойства объекта, поэтому vm.a аналогично vm.$data.a.

Свойства, имена которых начинаются с _ или $, не будут прокидываться из-за возможных конфликтов с внутренними свойствами и методами API Vue. Получить доступ к таким свойствам можно через vm.$data._property.

При определении компонента настройка data должна быть функцией, которая возвращает объект данных, потому что может быть создано множество экземпляров. Если использовать в data простой объект, то все созданные экземпляры получат ссылку на него! А когда data — функция, при создании нового экземпляра можно вызвать её и получить свежую копию данных для инициализации.

Чтобы сделать полную копию оригинального объекта, передайте vm.$data в JSON.parse(JSON.stringify(...)).

Обратите внимание, если использовать стрелочную функцию в свойстве data, то this не будет указывать на экземпляр компонента, но получить к нему доступ можно из первого аргумента функции:

  data: vm => ({ a: vm.myProp })

props

Список или хэш входных параметров, по которым разрешено получение данных из родительского компонента. Можно использовать простой синтаксис в виде массива, или объект, который предоставляет дополнительные возможности: проверку типов, пользовательские проверки и значения по умолчанию.

При использовании объектного синтаксиса можно указать следующие настройки: - type: может быть одним из следующих родных конструкторов: String, Number, Boolean, Array, Object, Date, Function, Symbol, любой функцией пользовательского конструктора или массивов таких. Проверяет является ли входной параметр указанного типа и выдаёт предупреждение если нет. Подробнее в разделе указания типов входных параметров. - default: any Определяет значение по умолчанию для входного параметра. Если входной параметр не был передан, то будет использовано это значение. Для объекта или массива значение по умолчанию нужно указывать фабричной функцией, возвращающей объект или массив. - required: Boolean Определяет является ли входной параметр обязательным. В не-продуктивных окружениях будет выведено предупреждение в консоли, если значение истинно, а входной параметр не передавался. - validator: Function Пользовательская функция проверки, которая принимает входной параметр в качестве единственного аргумента. В не-рабочих окружениях будет выведено предупреждение в консоли, если эта функция возвращает ложное значение (т.е. проверка не пройдена). Подробнее о проверке входных параметров можно прочитать здесь.

propsData

Входные параметры компонента при его создании. Обычно используются для целей модульного тестирования.

  var Comp = Vue.extend({
    props: ['msg'],
    template: '<div>{{ msg }}</div>'
  })

  var vm = new Comp({
    propsData: {
      msg: 'привет'
    }
  })

computed

Вычисляемые свойства, которые будут подмешаны к экземпляру Vue. В получателях и установщиках this будет указывать на экземпляр Vue.

Обратите внимание, при использовании стрелочной функции в определении вычисляемого свойства, this не будет указывать на экземпляр компонента, но к нему можно получить доступ из первого аргумента функции:

  computed: {
    aDouble: vm => vm.a * 2
  }

Вычисляемые свойства кэшируются и повторно вычисляются только при изменении реактивных зависимостей. Обратите внимание, если определённая зависимость выходит за область видимости экземпляра (т.е не реактивная), то вычисляемое свойство не будет обновляться.

methods

Методы, которые будут подмешаны к экземпляру Vue. Можно запускать эти методы напрямую из экземпляра VM, или использовать их в директивах. this методов указывает на экземпляр Vue.

Не используйте стрелочные функции при определении методов (например, plus: () => this.a++). Стрелочные функции связываются с родительским контекстом, поэтому this будет указывать не на экземпляр Vue, и this.a окажется неопределённым.

watch

Объект, ключи которого — выражения для наблюдения, а значения — обратновызовы, вызываемые при их изменении. Значения также могут быть строками с именами методов, или объектами, содержащими дополнительные настройки. Экземпляр Vue вызовет $watch() соответствующий каждому ключу объекта при своём создании.

Не используйте стрелочные функции при указании методов наблюдателей (например, searchQuery: newValue => this.updateAutocomplete(newValue)). Стрелочные функции связываются с родительским контекстом, поэтому this будет указывать не на экземпляр Vue, и this.updateAutocomplete окажется неопределённым.

Настройки — DOM

el

Указывает в какой существующий DOM-элемент устанавливать экземпляр Vue. Может быть как строковым CSS-селектором, так и объектом типа HTMLElement.

После установки экземпляра, переданный или найденный по CSS-селектору элемент будет доступен через vm.$el.

Если эта настройка указана при создании экземпляра, компиляция начинается сразу. В остальных случаях, вызовите vm.$mount(), чтобы запустить компиляцию.

Предоставленный элемент служит только точкой подключения. В отличие от Vue 1.x, он обязательно будет заменяться DOM-ом, сгенерированным Vue. Поэтому не стоит подключать в корневые элементы <html> или <body>.

Если не указана render-функция и отсутствует настройка template, то в качестве шаблона будет использовано HTML-содержимое DOM-элемента точки подключения. В этом случае требуется сборка Runtime + Компилятор.

template

Строковый шаблон с разметкой для экземпляра Vue. Этот шаблон заменяет элемент в точке монтирования. Вся существующая разметка в точке монтирования будет проигнорирована, если в шаблоне нет слота для распределения содержимого.

Если строка начинается с #, она будет использована как querySelector, а в качестве строкового шаблона использоваться innerHTML элемента с указанным id. Таким образом можно подключать шаблоны из тегов <script type="x-template">.

В целях безопасности используйте только те шаблоны Vue, которым можно доверять. Никогда не используйте в качестве шаблона данные, вводимые пользователем.

Если в настройках Vue указана render-функция, шаблон будет проигнорирован.

render

Альтернатива строковым шаблонам, позволяющая использовать все алгоритмические возможности JavaScript. Render-функция получает первым аргументом метод createElement, необходимый для создания элементов VNode (виртуальных узлов).

Для функциональных компонентов вторым параметром будет context для доступа к контекстным данным, поскольку у функциональных компонентов нет экземпляров.

Функция в настройке render имеет приоритет над render-функцией, скомпилированной из настройки template и над HTML-шаблоном расположенным в точке монтирования, указанной в настройке el.

renderError

Добавлено в версии 2.2.0+

Предоставляет альтернативное отображение если render-функция встречается с ошибкой. Ошибка будет передана в renderError в качестве второго аргумента. Это может пригодиться при использовании вместе с горячей перезагрузкой модулей.

Настройки-перехватчики жизненного цикла

Перехватчик (hook — буквально «крючок») — функция, вызываемая в определённый момент жизненного цикла, например, непосредственно перед или после создания компонента.

Все перехватчики жизненного цикла автоматически привязывают контекст this к экземпляру Vue, чтобы получить доступ к данным, вычисляемым свойствами и методами. Не используйте стрелочные функции для определения хуков жизненного цикла (например, created: () => this.fetchTodos()). Поскольку стрелочные функции связываются с родительским контекстом, this будет указывать не на экземпляр Vue, и this.fetchTodos окажется неопределённым.

beforeCreate

created

Вызывается синхронно сразу после создания экземпляра. На этом этапе экземпляр закончил обработку настроек и настроил наблюдение за данными, вычисляемые свойства, методы, обратновызовы слежения и событий. Однако, фаза монтирования ещё не начата, и свойство $el ещё не доступно.

beforeMount

mounted

Вызывается сразу после монтирования экземпляра, когда взамен el создан vm.$el. Если корневой экземпляр смонтирован на элемент документа, vm.$el тоже будет элементом документа.

Обратите внимание, что mounted не гарантирует что все дочерние компоненты будут уже примонтированы. Если необходимо подождать пока не будут отрисованы все дочерние, можно воспользоваться vm.$nextTick внутри mounted:

  mounted: function () {
    this.$nextTick(function () {
      // Код, который будет запущен только после
      // отображения всех представлений
    })
  }

Не вызывается при отрисовке на стороне сервера.

beforeUpdate

Вызывается при изменении данных перед тем, как DOM будет обновляться. Это хорошее место для получения доступа к существующему DOM перед обновлением, например чтобы удалить добавленные слушатели событий.

Не вызывается при отрисовке на стороне сервера, потому что на сервере выполняется только начальная отрисовка.

updated

Вызывается после того, как виртуальный DOM был обновлён из-за изменения данных.

DOM компонента будет уже обновлён к моменту вызова этого перехватчика, поэтому вы можете выполнять здесь операции связанные с DOM. Тем не менее, старайтесь избегать изменения состояния в этом перехватчике. Для реагирования на изменения состояния лучше использовать вычисляемые свойства или отслеживание с помощью watch.

Обратите внимание, что updated не гарантирует что все дочерние компоненты будут уже переотрисованы. Если необходимо подождать пока все не будут повторно отрисованы, можно воспользоваться vm.$nextTick внутри updated:

  updated: function () {
    this.$nextTick(function () {
      // Код, который будет запущен только после
      // обновления всех представлений
    })
  }

Не вызывается при отрисовке на стороне сервера.

activated

deactivated

beforeDestroy

destroyed

Вызывается после уничтожения экземпляра Vue. К моменту вызова этого перехватчика, все директивы экземпляра Vue уже отвязаны, все подписчики событий удалены, а все дочерние экземпляры Vue уничтожены.

Не вызывается при отрисовке на стороне сервера.

errorCaptured

Добавлено в версии 2.5.0+

Вызывается, когда фиксируется ошибка из любого дочернего компонента. Перехватчик получает три аргумента: ошибку, экземпляр компонента, который вызвал ошибку, и строку, содержащую информацию где была зафиксирована ошибка. Перехватчик может возвращать false, чтобы предотвратить дальнейшее распространение ошибки.

Вы можете изменить состояние компонента в этом перехватчике. Тем не менее, важно иметь в вашем шаблоне или render-функции условия, которые оборачивают другое содержимое при обнаружении ошибки; иначе компонент может попасть в бесконечный цикл отрисовки.

Правила распространения ошибок

Настройки — ресурсы

directives

filters

components

Настройки — композиция

parent

Определяет родительский экземпляр для создаваемого. Устанавливает отношение «родитель-потомок» между ними. Родитель будет доступен дочернему экземпляру посредством this.$parent, а дочерний экземпляр будет добавлен в массив $children родителя.

Старайтесь реже использовать $parent и $children — этот механизм мы предусмотрели на крайний случай. Для общения между родителем и ребёнком лучше использовать входные параметры и события.

mixins

Массив объектов-примесей. Примеси могут содержать те же параметры, что и обычные объекты экземпляров Vue — они будут добавлены к основным настройкам согласно логике Vue.extend(). Например, если и примесь и объект экземпляра содержат перехватчик created, то будут вызваны оба.

Перехватчики примесей вызываются в порядке их определения, до вызова собственных перехватчиков компонента.

extends

Позволяет декларативно наследоваться от другого компонента (который может быть либо простым объектом, либо конструктором), не используя Vue.extend. Главным образом предназначено для облегчения наследования между компонентами, определёнными в одном файле.

Эта функциональность аналогична mixins.

provide / inject

Добавлено в версии 2.2.0+

provide и inject в первую очередь предназначены для особых случаев использования в добавках или компонентах библиотек. Их не рекомендуется использовать в коде приложения.

Эта пара настроек используется вместе, чтобы позволить компоненту-родителю внедрять зависимости во всех его компонентах-потомках, независимо от того, насколько глубоко в иерархии они находятся, пока они находятся в той же самой родительской цепочке. Если вы знакомы с React, это очень похоже на функцию контекста.

Настройка provide должна быть объектом или функцией, возвращающей объект. Этот объект содержит свойства, которые будут доступны для внедрения в их потомках. Вы можете использовать ES2015 Symbols в качестве ключей этого объекта, но только в окружениях, которые родно поддерживают Symbol и Reflect.ownKeys.

Настройка inject должна быть:

Настройки — разное

name

Название компонента. Позволяет компоненту рекурсивно вызывать самого себя в шаблоне. Обратите внимание что когда компонент регистрируется глобально посредством Vue.component(), глобальный ID автоматически устанавливается равным его имени.

Кроме того, компоненты с указанным name проще отлаживать из-за более понятных сообщений в консоли. Во Vue-devtools все безымянные компоненты довольно неинформативно называются <AnonymousComponent>. Указание имён для компонентов значительно улучшает ситуацию.

delimiters

functional

model

Добавлено в версии 2.2.0+

inheritAttrs

Добавлено в версии 2.4.0+

По умолчанию атрибуты из родительской области видимости, которые не были распознаны как входные параметры, будут «проваливаться» и применяться к корневому элементу дочернего компонента как обычные HTML-атрибуты. При создании компонента, который оборачивает элемент или другой компонент, это не всегда может быть ожидаемым поведением. Устанавливая inheritAttrs в false, это поведение по умолчанию может быть отключено. Атрибуты доступны через свойство экземпляра $attrs (также добавленное в версии 2.4.0) и могут быть явно привязаны к некорневому элементу с использованием v-bind.

Примечание: эта настройка не влияет на привязки class и style.

comments

Добавлено в версии 2.4.0+

Свойства экземпляра

vm.$data

Объект с данными, над которым экземпляр Vue осуществляет наблюдение. Экземпляр прокидывает сюда вызовы своих полей. (Например, vm.a будет указывать на vm.$data.a)

vm.$props

Добавлено в версии 2.2.0+

Объект, предоставляющий доступ к текущим входным данным компонента. Экземпляр Vue прокидывает доступ к свойствам своего объекта входных данных.

vm.$el

vm.$options

Настройки, переданные в конструктор экземпляра Vue. Полезно, если вы хотите передавать туда собственные настройки:

  new Vue({
    customOption: 'что-нибудь',
    created: function () {
      console.log(this.$options.customOption) // => 'что-нибудь'
    }
  })

vm.$parent

vm.$root

Корневой экземпляр Vue текущего дерева компонентов. Если у экземпляра нет родителя, в этом поле будет он сам.

vm.$children

vm.$slots

Используется для доступа к содержимому, указанному через слоты. У каждого именованного слота есть соответствующее значение (например, содержимое slot="foo" попадёт в vm.$slots.foo). Свойство default содержит узлы, не включённые в именованные слоты, либо содержимое v-slot:default.

Обратите внимание, что слоты не реактивны. Если необходим компонент, который будет перерисовываться при изменении данных, переданных в слот, мы рекомендуем рассмотреть другую стратегию, которая полагается на настройки реактивного экземпляра, такие как props или data.

Примечание: v-slot:foo поддерживается в версии v2.6+. Для более старых версий вы можете использовать устаревший синтаксис.

Особенно полезно vm.$slots в компонентах с render-функциями.

vm.$scopedSlots

Добавлено в версии 2.1.0+

Используется для доступа к содержимому, указанному через слоты с ограниченной областью видимости. Для каждого слота, включая и слот default, объект содержащий соответствующую функцию, что возвращает VNode.

Использование vm.$scopedSlots наиболее полезно при написании компонентов с использованием рисующей-функций.

Примечание: начиная с версии 2.6.0+ есть два важных изменения этого свойства:

  1. Функции слотов с ограниченной областью видимости теперь гарантированно возвращают массив VNodes, за исключением когда возвращаемое свойство является недействительным, в таком случае функция вернёт undefined.

  2. Все $slots теперь также доступны в $scopedSlots как функции. Если вы работаете с рисующими-функциями, рекомендуем всегда обращаться к слотам через $scopedSlots, независимо от того, используют ли они свою область видимости в настоящее время или нет. Это не только упростит будущие изменения при переработке слота, но и облегчит переезд на Vue 3, где все слоты будут функциями.

vm.$refs

vm.$isServer

vm.$attrs

Добавлено в версии 2.4.0+

Содержит нераспознанные атрибуты (за исключением class и style), указанные для компонента в родительской области видимости. Если у компонента нет объявленных входных параметров, здесь окажутся все атрибуты (кроме class и style). Эти атрибуты можно передавать вниз во внутренние компоненты через v-bind="$attrs" — что может быть полезным при создании компонентов высшего порядка (HOC).

vm.$listeners

Добавлено в версии 2.4.0+

Методы экземпляра — данные

vm.$watch( expOrFn, callback, [options] )

Обратите внимание: когда изменяете (а не заменяете) объект или массив, старое и новое значения при вызове обратновызова будут совпадать, так как они ссылаются на один и тот же объект или массив. Vue не сохраняет копии объекта на момент, предшествовавший изменениям.

Чтобы слежение реагировало на изменения во вложенных объектах, передайте deep: true в объекте параметров. Обратите внимание, что для наблюдения за изменениями массивов этого не требуется.

  vm.$watch('someObject', callback, {
    deep: true
  })
  vm.someObject.nestedValue = 123
  // вызывается callback

Если передано immediate: true, обратновызов будет вызван сразу же после начала наблюдения с текущим значением выражения:

  vm.$watch('a', callback, {
    immediate: true
  })
  // `обратновызов` вызывается сразу, с текущим значением `a`

Обратите внимание, при использовании настройки immediate нет возможности отменить отслеживание указанного свойства в обратновызове вызванном в первый раз.

  // Подобное приведёт к ошибке
  var unwatch = vm.$watch(
    'value',
    function () {
      doSomething()
      unwatch()
    },
    { immediate: true }
  )

Если необходимо вызвать функцию unwatch внутри обратновызова, то следует проверять её доступность:

  var unwatch = vm.$watch(
    'value',
    function () {
      doSomething()
      if (unwatch) {
        unwatch()
      }
    },
    { immediate: true }
  )

vm.$set( target, propertyName/index, value )

vm.$delete( target, propertyName/index )

Методы экземпляра — события

vm.$on( event, callback )

Создаёт подписку на пользовательское событие текущего vm. Такое событие можно породить функцией vm.$emit. Обратновызов получит все дополнительные аргументы, переданные этому методу.

vm.$once( event, callback )

Создаёт подписку на пользовательское событие, но срабатывает только один раз. После первого же использования подписчик будет удалён.

vm.$off( [event, callback] )

vm.$emit( eventName, […args] )

Порождает событие в текущем экземпляре. Все дополнительно указанные параметры будут переданы в обратновызов подписки.

Использование $emit с дополнительными аргументами:

  Vue.component('magic-eight-ball', {
    data: function () {
      return {
        possibleAdvice: ['Да', 'Нет', 'Может быть']
      }
    },
    methods: {
      giveAdvice: function () {
        var randomAdviceIndex = Math.floor(Math.random() * this.possibleAdvice.length)
        this.$emit('give-advice', this.possibleAdvice[randomAdviceIndex])
      }
    },
    template: `
      <button v-on:click="giveAdvice">
        Делать или нет?
      </button>
    `
  })
  <div id="emit-example-argument">
    <magic-eight-ball v-on:give-advice="showAdvice"></magic-eight-ball>
  </div>
  new Vue({
    el: '#emit-example-argument',
    methods: {
      showAdvice: function (advice) {
        alert(advice)
      }
    }
  })

Методы экземпляра — жизненный цикл

vm.$mount( [elementOrSelector] )

Если при создании экземпляра Vue не была указана настройка el, он окажется в «непримонтированном» (unmounted) состоянии, то есть без ассоциированного элемента DOM. Вызовите vm.$mount(), чтобы примонтировать такой экземпляр.

Если параметр elementOrSelector не указан, шаблон будет отрисован как элемент вне документа. Вы сможете затем вставить такой элемент родным методом DOM.

Метод возвращает сам экземпляр, чтобы вы могли вызывать дополнительные методы по цепочке.

vm.$forceUpdate()

Заставляет экземпляр Vue произвести переотрисовку. Обратите внимание, что этот метод затронет не все дочерние компоненты, а только сам экземпляр и дочерние компоненты со слотами содержимого.

vm.$nextTick( [callback] )

Выполняет функцию callback при следующем цикле обновления DOM. Вызывайте сразу после изменения данных, чтобы работать с обновлённым DOM. Функция делает то же самое, что и глобальный Vue.nextTick, но кроме того связывает this с текущим экземпляром в обратновызове.

Добавлено в версии 2.1.0+: возвращает Promise, если окружение их поддерживает и обратновызов не указан. Обратите внимание, что Vue не поставляется с модернизатором для Promise. Поэтому при необходимости поддержки обозревателей, которые не поддерживают их родно (например, IE), вам придётся предоставить модернизатор самостоятельно.

vm.$destroy()

Полностью уничтожает vm. Очищает связи с другими существующими vm, отвязывает директивы, отменяет все подписки на события.

Вызывает перехватчики beforeDestroy и destroyed.

Как правило, вам не придётся вызывать этот метод самим. Лучше контролировать жизненный цикл дочерних компонентов в data-driven стиле директивами v-if и v-for.

Директивы

v-text

Управляет текстовым содержимым элемента (textContent). Если вам нужно управлять только частью содержимого тега, используйте интерполяцию {{ Mustache }}.

  <span v-text="msg"></span>
  <!-- то же, что -->
  <span>{{msg}}</span>

v-html

Динамическая отрисовка произвольного HTML-кода на сайте — это очень опасная практика, легко приводящая к XSS-уязвимостям. Передавайте в v-html только содержимое, которому можно доверять, и никогда — необработанный пользовательский ввод.

В однофайловых компонентах scoped стили не будут применены к содержимому внутри v-html, потому что этот HTML не обрабатывается компилятором шаблонов Vue. Если вы хотите стилизовать содержимое v-html с помощью местного CSS, то вы можете вместо этого использовать CSS-модули или дополнительный глобальный элемент <style> с иной стратегией, такой как БЭМ.

v-show

v-if

Осуществляет отрисовку элемента, только если передаваемое выражение истинно. При изменении значения выражения на противоположное, элемент и содержащиеся в нём компоненты и директивы уничтожаются/пересоздаются. Если элемент — <template>, вместо него будет отрисовано его содержимое.

Эта директива также запускает анимационные переходы при изменении условия.

При совместном использовании v-if и v-for, v-for имеет более высокий приоритет. Подробности на странице отрисовки списков.

v-else

v-else-if

Добавлено в версии 2.1.0+

v-for

Многократно отрисовывает элемент или блок шаблона, основываясь на переданных данных. Значение директивы должно следовать синтаксису alias in expression — в alias будет элемент текущего прохода цикла:

  <div v-for="item in items">
    {{ item.text }}
  </div>

Кроме того, вы можете указать название для индекса (или ключа, если вы работаете с объектом):

  <div v-for="(item, index) in items"></div>
  <div v-for="(val, key) in object"></div>
  <div v-for="(val, name, index) in object"></div>

По умолчанию v-for будет пытаться обновить элементы «на месте», не перемещая их. Если вам нужно, чтобы элементы перемещались, сохраняя явную упорядоченность, укажите атрибут key:

  <div v-for="item in items" :key="item.id">
    {{ item.text }}
  </div>

С версии 2.6.0+, v-for также может работать со значениями, реализующими протокол Iterable, включая родные Map и Set. К сожалению, Vue 2.x в настоящее время не поддерживает реактивность для значений Map и Set и поэтому не сможет автоматически отслеживать изменения в них.

При совместном использовании v-if и v-for, v-for имеет более высокий приоритет. Подробности на странице отрисовки списков.

Использование v-for подробно описано в секции руководства по ссылке ниже.

v-on

Прикрепляет к элементу подписчик события. Тип события указывается в параметре. Выражение может быть именем метода, встрочное-выражением или вовсе отсутствовать, если указан один или несколько изменителей.

У обычного элемента можно подписаться только на родные события DOM. У элемента компонента можно подписаться на пользовательские события, вызываемые этим дочерним компонентом.

При работе с родными событиями DOM, метод получает родное событие единственным аргументом. В inline-выражениях, можно получить к нему доступ с помощью $event: v-on:click="handle('aga', $event)".

Начиная с версии 2.4.0+, v-on также поддерживает привязку к объекту пар событие/обработчик без аргумента. Обратите внимание, что при использовании синтаксиса объекта не поддерживаются никакие изменители.

Подписка на пользовательское событие в дочернем элементе (обработчик вызывается, когда дочерний элемент вызывает “my-event”):

  <my-component @my-event="handleThis"></my-component>

  <!-- встрочное-выражение -->
  <my-component @my-event="handleThis(123, $event)"></my-component>

  <!-- подписываемся на родное событие в компоненте -->
  <my-component @click.native="onClick"></my-component>

v-bind

Изменитель .camel позволяет перевод имени атрибута v-bind в camelCase при использовании DOM-шаблонов, например для атрибута viewBox SVG:

  <svg :view-box.camel="viewBox"></svg>

В использовании .camel нет необходимости, если вы пользуетесь строковыми шаблонами или vue-loader/vueify.

v-model

v-slot

  <!-- Именованные слоты -->
  <base-layout>
    <template v-slot:header>
      Содержимое заголовка
    </template>

    Содержимое слота по умолчанию

    <template v-slot:footer>
      Содержимое подвала
    </template>
  </base-layout>

  <!-- Именованный слот с входными параметрами -->
  <infinite-scroll>
    <template v-slot:item="slotProps">
      <div class="item">
        {{ slotProps.item.text }}
      </div>
    </template>
  </infinite-scroll>

  <!-- Слот по умолчанию с входными параметрами, с использованием деструктурирования -->
  <mouse-position v-slot="{ x, y }">
    Позиция курсора: {{ x }}, {{ y }}
  </mouse-position>

Более подробно можно изучить по ссылкам ниже.

v-pre

  <span v-pre>{{ эта часть не будет скомпилирована }}</span>

v-cloak

Эта директива останется на элементе до тех пор, пока связанный с ним экземпляр Vue не закончит компиляцию. В сочетании с CSS-правилом [v-cloak] { display: none } этой директивой можно скрывать не скомпилированные шаблоны до тех пор, пока экземпляр Vue не будет готов.

  <div v-cloak>
    {{ message }}
  </div>

Элемент <div> не появится, пока компиляция не закончится.

v-once

Специальные атрибуты

key

Атрибут key помогает алгоритму работы с виртуальным DOM определить, какие узлы соответствует какой строке данных. Если этот атрибут не указан, Vue использует алгоритм, уменьшающий перемещение элементов и старается обновить и повторно использовать как можно больше элементов правильного типа «на местах». А если ключ указан, Vue изменяет порядок следования элементов, основываясь на изменении порядка ключей. Элементы, соответствующие ключам, которых больше нет, Vue всегда уничтожает.

Потомки одного и того же общего родителя должны иметь уникальные ключи. Повторяющиеся ключи приведут к ошибкам при отрисовке.

Как правило, используется в связке с v-for:

  <ul>
    <li v-for="item in items" :key="item.id">...</li>
  </ul>

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

Например:

  <transition>
    <span :key="text">{{ text }}</span>
  </transition>

При изменении text, <span> всегда будет заменяться целиком, что спровоцирует вызов анимации.

ref

is

Используется для динамически переключаемых компонентов и для обхода ограничений при использовании DOM-шаблонов.

Например:

  <!-- используемый компонент меняется при изменениях currentView -->
  <component v-bind:is="currentView"></component>

  <!-- необходим, потому что `<my-row>` будет считаться ошибочным -->
  <!-- элементом внутри `<table>` и будет вынесен выше             -->
  <table>
    <tr is="my-row"></tr>
  </table>

Подробности использования можно изучить по ссылкам ниже.

slot устарело

Предпочитайте использовать v-slot в 2.6.0+.

slot-scope устарело

Предпочитайте использовать v-slot в 2.6.0+.

Используется для обозначения элемента или компонента в качестве слота с ограниченной областью видимости. Значением атрибута должно быть правильное выражение JavaScript, которое может использоваться в качестве аргумента сигнатуры функции. Это означает, что в поддерживаемых окружениях вы также можете использовать деструктурирование ES2015 в выражении. Служит заменой для scope в версии 2.5.0+.

Этот атрибут не поддерживает динамические привязки.

scope удалено

Заменён на slot-scope в 2.5.0+. Предпочитайте использовать v-slot в 2.6.0+.

Используется для обозначения элемента <template> в качестве слота с ограниченной областью видимости, который заменён на slot-scope в версии 2.5.0+.

Встроенные компоненты

component

transition

transition-group

Указывает анимацию перехода для нескольких элементов или компонентов. <transition-group> превращается в реальный элемент DOM. По умолчанию для этого используется тег <span>, но можно указать любой другой в параметре tag.

Обратите внимание, что каждый потомок <transition-group> должен иметь уникальное значение key, чтобы анимации работали корректно.

Анимации перехода реализованы с помощью CSS-превращений. Когда позиция потомка изменилась после обновления, ему будет добавлен CSS-класс (автоматически созданный из атрибута name, или же явно указанный в атрибуте move-class). Если после применения этого класса свойство transform можно будет анимировать, элемент будет с плавным переходом переведён туда, где он должен быть с помощью техники FLIP.

  <transition-group tag="ul" name="slide">
    <li v-for="item in items" :key="item.id">
      {{ item.text }}
    </li>
  </transition-group>

keep-alive

Оберните динамические компоненты тегом <keep-alive>, чтобы кэшировать экземпляры интерактивных компонентов вместо того, чтобы их уничтожать. Так же, как и <transition>, <keep-alive> — абстрактный компонент: при отрисовке он не превращается в элемент DOM, и не показывается в цепочке родителей компонента.

Когда компонент, расположенный внутри <keep-alive> показывается или скрывается, вызываются его перехватчики жизненного цикла activated или deactivated соответственно.

В версии 2.2.0+, activated и deactivated будет срабатывать для всех вложенных компонентов внутри <keep-alive> дерева.

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

  <!-- базовый вариант -->
  <keep-alive>
    <component :is="view"></component>
  </keep-alive>

  <!-- несколько потомков -->
  <keep-alive>
    <comp-a v-if="a > 1"></comp-a>
    <comp-b v-else></comp-b>
  </keep-alive>

  <!-- использование вместе с `<transition>` -->
  <transition>
    <keep-alive>
      <component :is="view"></component>
    </keep-alive>
  </transition>

Обратите внимание, <keep-alive> предназначен для случая, когда есть один прямой дочерний компонент, который переключается. Он не будет работать, если в нём есть v-for. При наличии несколько дочерних компонентов отображаемых по условию, как указано выше, <keep-alive> требует, чтобы отображался только один дочерний компонент в один момент времени.

Проверяется сначала собственное значение настройки name компонента, а в случае его недоступности — имя, указанное при местной регистрации (ключ в настройке components компонента-родителя). Анонимные компоненты таким образом проверить не получится.

<keep-alive> не работает с функциональными компонентами, так как у них отсутствуют экземпляры.

slot

Интерфейс VNode

Отрисовка на стороне сервера