# API приложения
Во Vue 3 все API, которые глобально изменяют поведение Vue, были вынесены в экземпляр приложения, создаваемого с помощью нового метода createApp
. Теперь их эффекты ограничены конкретным экземпляром приложения:
import { createApp } from 'vue'
const app = createApp({})
2
3
Вызов createApp
возвращает экземпляр приложения. Этот экземпляр предоставляет доступ к контексту приложения. Всё дерево компонентов, смонтированных экземпляром приложения, имеет один и тот же контекст, конфигурации которого были «глобальными» во Vue 2.x.
Так как метод createApp
возвращает экземпляр приложения, то теперь можно составлять цепочки вызовов из других методов. Информация о них содержится в следующих разделах.
# component
Аргументы:
{string} name
{Function | Object} definition (опционально)
Возвращает:
- Экземпляр приложения, если аргумент
definition
передавался - Экземпляр компонента, если аргумент
definition
не передавался
- Экземпляр приложения, если аргумент
Использование:
Регистрация или получение глобального компонента. Регистрация также автоматически устанавливает
name
компонента в соответствии с полученным параметромname
.Пример:
import { createApp } from 'vue'
const app = createApp({})
// регистрация с объектом настроек
app.component('my-component', {
/* ... */
})
// получение зарегистрированного компонента
const MyComponent = app.component('my-component')
2
3
4
5
6
7
8
9
10
11
- См. также: Компоненты
# config
Использование:
Объект с конфигурацией приложения.
Пример:
import { createApp } from 'vue'
const app = createApp({})
app.config = {...}
2
3
4
- См. также: Конфигурация приложения
# directive
Аргументы:
{string} name
{Function | Object} definition (опционально)
Возвращает:
- Экземпляр приложения, если аргумент
definition
передавался - Экземпляр директивы, если аргумент
definition
не передавался
- Экземпляр приложения, если аргумент
Использование:
Регистрация или получение глобальной директивы.
Пример:
import { createApp } from 'vue'
const app = createApp({})
// регистрация
app.directive('my-directive', {
// Директива имеет набор хуков жизненного цикла:
// вызывается до привязки атрибутов или слушателей событий к элементу
created() {},
// вызывается перед монтированием компонента, в котором находится элемент с директивой
beforeMount() {},
// вызывается после монтирования компонента, в котором находится элемент с директивой
mounted() {},
// вызывается перед обновлением VNode родительского компонента
beforeUpdate() {},
// вызывается после обновления VNode родительского компонента и VNodes его дочерних элементов
updated() {},
// вызывается перед тем, как будет размонтирован родительский компонент
beforeUnmount() {},
// вызывается после того, как будет размонтирован родительский компонент
unmounted() {}
})
// регистрация (определение директивы с помощью функции)
app.directive('my-directive', () => {
// будет вызвана для хуков `mounted` и `updated`
})
// получение определения зарегистрированной директивы
const myDirective = app.directive('my-directive')
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Хуки директивы принимают следующие аргументы:
# el
Элемент, к которому привязывается директива. Можно использовать для прямого манипулирования DOM.
# binding
Объект, содержащий следующие свойства:
instance
: Экземпляр компонента, где используется директива.value
: Значение, переданное в директиву. Например, дляv-my-directive="1 + 1"
значением будет2
.oldValue
: Предыдущее значение доступно только в хукахbeforeUpdate
иupdated
. Свойство доступно независимо от того, изменялось ли значение.arg
: Аргумент, передаваемый с директивой (если указан). Например, дляv-my-directive:foo
аргументом будет"foo"
.modifiers
: Объект, содержащий модификаторы (если указаны). Например, дляv-my-directive.foo.bar
объект будет таким:{ foo: true, bar: true }
.dir
: Объект, который передавался в качестве параметра при регистрации директивы. Например, для директивы:app.directive('focus', { mounted(el) { el.focus() } })
1
2
3
4
5в
dir
будет передаваться объект:{ mounted(el) { el.focus() } }
1
2
3
4
5
# vnode
Схема реального DOM-элемента, полученного выше в качестве аргумента el
.
# prevNode
Предыдущая виртуальная нода. Доступна только в хуках beforeUpdate
и updated
.
Примечание
Ко всем этим аргументам, кроме el
, следует относиться как доступным «только для чтения» и никогда не изменять их. Если нужно передать данные между хуками, рекомендуем использовать dataset (opens new window) элемента.
- См. также: Пользовательские директивы
# mixin
Аргументы:
{Object} mixin
Возвращает:
- Экземпляр приложения
Использование:
Добавляет примесь (mixin) ко всей области приложения. Зарегистрированные примеси можно использовать в шаблоне любого компонента. Это будет полезно разработчикам плагинов для добавления собственного пользовательского поведения во все компоненты. Не рекомендуется использовать в коде приложения.
См. также: Глобальные примеси
# mount
Аргументы:
{Element | string} rootContainer
{boolean} isHydrate (опционально)
Возвращает:
- Экземпляр корневого компонента
Использование:
Заменяет
innerHTML
указанного DOM-элемента на отрисованный шаблон корневого компонента приложения.Пример:
<body>
<div id="my-app"></div>
</body>
2
3
import { createApp } from 'vue'
const app = createApp({})
// необходимые приготовления
app.mount('#my-app')
2
3
4
5
- См. также: Диаграмма жизненного цикла
# provide
Аргументы:
{string | Symbol} key
value
Возвращает:
- Экземпляр приложения
Использование:
Устанавливает значение, которое будет внедрено во все компоненты внутри приложения. Компоненты должны использовать
inject
для получения этих установленных значений.С точки зрения
provide
/inject
, приложение может рассматриваться как предок на корневом уровне, а корневой компонент — как его единственный дочерний элемент.Не следует путать этот метод с предоставлением опций компоненту или функции в Composition API. Хотя они также являются частью того же механизма
provide
/inject
, они используются для конфигурирования значений, предоставляемых компонентом, а не приложением.Предоставление значений через приложение полезно при разработке плагинов, так как плагины обычно не могут предоставлять значения с помощью компонентов. Это альтернатива использованию globalProperties.
Примечание
Привязки
provide
иinject
НЕ ЯВЛЯЮТСЯ РЕАКТИВНЫМИ. Так и задумано. Однако, при передаче реактивного объекта, его свойства останутся реактивными.Пример:
Внедрение свойства в корневой компонент со значением, предоставленным приложением:
import { createApp } from 'vue'
const app = createApp({
inject: ['user'],
template: `
<div>
{{ user }}
</div>
`
})
app.provide('user', 'administrator')
2
3
4
5
6
7
8
9
10
11
12
- См. также: Provide / Inject
# unmount
Использование:
Демонтирует корневой компонент экземпляра приложения.
Пример:
<body>
<div id="my-app"></div>
</body>
2
3
import { createApp } from 'vue'
const app = createApp({})
// необходимые приготовления
app.mount('#my-app')
// приложение будет размонтировано через 5 секунд после монтирования
setTimeout(() => app.unmount(), 5000)
2
3
4
5
6
7
8
# use
Аргументы:
{Object | Function} plugin
...options (опционально)
Возвращает:
- Экземпляр приложения
Использование:
Установка плагина Vue.js. При передаче объекта он должен содержать метод
install
. Если передаётся функция, то она рассматривается как методinstall
для установки плагина.Экземпляр приложения передаётся первым аргументом при вызове метода
install
. Любые настройкиoptions
, переданные вuse
, будут в последующих аргументах.При многократном вызове метода установки одного и того же плагина установка будет выполнена только один раз.
Пример:
import { createApp } from 'vue' import MyPlugin from './plugins/MyPlugin' const app = createApp({}) app.use(MyPlugin) app.mount('#app')
1
2
3
4
5
6
7См. также: Плагины
# version
Использование:
Возвращает номер установленной версии Vue в виде строки. Это полезно для сторонних плагинов, в которых могут использоваться разные стратегии для разных версий.
Пример:
export default { install(app) { const version = Number(app.version.split('.')[0]) if (version < 3) { console.warn('Для этого плагина требуется Vue 3') } // ... } }
1
2
3
4
5
6
7
8
9
10
11См. также: Глобальное API — version