vue2_rus

Добавки

Добавки позволяют добавить во Vue некоторую глобальную функциональность. Область применения добавок явно не определена. Можно разделить добавки на нескольких типов:

  1. Добавляют глобальные методы и/или свойства, например vue-custom-element

  2. Добавляют глобальные объекты: директивы/фильтры/переходы и т.д., например vue-touch

  3. Добавляют настройки компонентам через глобальную примесь, например vue-router

  4. Добавляют методы экземпляра Vue через Vue.prototype.

  5. Библиотеки, предоставляющие собственные API и комбинирующие вышеперечисленные возможности, например vue-router

Использование добавок

Для использования добавки необходимо вызвать глобальный метод Vue.use(). Его нужно вызывать перед new Vue():

// вызывает `MyPlugin.install(Vue)`
Vue.use(MyPlugin)

new Vue({
  //... настройки
})

Можно передавать дополнительные параметры в добавку:

Vue.use(MyPlugin, { someOption: true })

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

Некоторые официальные добавки Vue.js, такие как vue-router, автоматически вызывают Vue.use(), если обнаружат глобальную переменную Vue. Однако при использовании инструментов модульного окружения, например CommonJS, необходимо всегда вызывать Vue.use() явно:

// При использовании CommonJS посредством Browserify или Webpack
var Vue = require('vue')
var VueRouter = require('vue-router')

// Не забудьте этот вызов!
Vue.use(VueRouter)

Обратите внимание на awesome-vue — огромную коллекцию добавок и библиотек от сообщества Vue.

Создание добавки

Добавка Vue.js должен содержать метод install. Этот метод будет вызываться с конструктором Vue в качестве первого аргумента, и с дополнительными настройками добавки в качестве второго (если передавались):

MyPlugin.install = function (Vue, options) {
  // 1. добавление глобального метода или свойства
  Vue.myGlobalMethod = function () {
    // некоторая логика ...
  }

  // 2. добавление глобального объекта
  Vue.directive('my-directive', {
    bind (el, binding, vnode, oldVnode) {
      // некоторая логика ...
    }
    ...
  })

  // 3. добавление настроек компонентов
  Vue.mixin({
    created: function () {
      // некоторая логика ...
    }
    ...
  })

  // 4. добавление метода экземпляра
  Vue.prototype.$myMethod = function (methodOptions) {
    // некоторая логика ...
  }
}