API додатку
createApp()
Створює екземпляр додатку.
Тип
tsfunction createApp(rootComponent: Component, rootProps?: object): App
Подробиці
Перший аргумент - кореневий компонент. Другим необов'язковим аргументом є реквізити, які потрібно передати кореневому компоненту.
Приклад
З вбудованим кореневим компонентом:
jsimport { createApp } from 'vue' const app = createApp({ /* параметри кореневого компонента */ })
З імпортованим компонентом:
jsimport { createApp } from 'vue' import App from './App.vue' const app = createApp(App)
Див. також Посібник - Створення додатка на Vue
createSSRApp()
Створює екземпляр додатка в режимі гідратації SSR. Використання точно таке ж, як createApp()
.
app.mount()
Монтує екземпляр додатка в елемент-контейнер.
Тип
tsinterface App { mount(rootContainer: Element | string): ComponentPublicInstance }
Подробиці
Аргументом може бути фактичний елемент DOM або селектор CSS (буде використано перший відповідний елемент). Повертає екземпляр кореневого компонента.
Якщо компонент має шаблон або визначену функцію рендерингу, він замінить будь-які наявні вузли DOM усередині контейнера. В іншому випадку, якщо доступний компілятор під час виконання,
innerHTML
контейнера буде використано як шаблон.У режимі SSR гідратації він гідратує наявні вузли DOM всередині контейнера. Якщо є невідповідності, наявні вузли DOM буде змінено відповідно до очікуваного результату.
Для кожного екземпляра додатка,
mount()
можна викликати лише один раз.Приклад
jsimport { createApp } from 'vue' const app = createApp(/* ... */) app.mount('#app')
Можна також змонтувати на фактичний елемент DOM:
jsapp.mount(document.body.firstChild)
app.unmount()
Демонтує змонтований екземпляр додатка, ініціюючи хуки життєвого циклу демонтування для всіх компонентів у дереві компонентів додатка.
Тип
tsinterface App { unmount(): void }
app.component()
Реєструє глобальний компонент, якщо передається ім’я і визначення компонента, або отримує вже зареєстрований, якщо передається лише ім’я.
Тип
tsinterface App { component(name: string): Component | undefined component(name: string, component: Component): this }
Приклад
jsimport { createApp } from 'vue' const app = createApp({}) // зареєструвати параметри об'єкта app.component('my-component', { /* ... */ }) // отримати зареєстрований компонент const MyComponent = app.component('my-component')
Також до вашої уваги: Реєстрація компонента
app.directive()
Реєструє глобальну користувацьку директиву, якщо передається ім’я і визначення директиви, або отримує вже зареєстровану, якщо передається лише ім’я.
Тип
tsinterface App { directive(name: string): Directive | undefined directive(name: string, directive: Directive): this }
Приклад
jsimport { createApp } from 'vue' const app = createApp({ /* ... */ }) // реєстрація (об'єктна директива) app.directive('my-directive', { /* користувацькі хуки директив */ }) // реєстрація (скорочена функція директиви) app.directive('my-directive', () => { /* ... */ }) // отримати зареєстровану директиву const myDirective = app.directive('my-directive')
Також до вашої уваги: Користувацькі директиви
app.use()
Встановлює плагін.
Тип
tsinterface App { use(plugin: Plugin, ...options: any[]): this }
Подробиці
Очікує плагін як перший аргумент і додаткові параметри плагіна як другий аргумент.
Плагін може бути або об'єктом із методом
install()
, або просто функцією, яка використовуватиметься як методinstall()
. Параметри (другий аргументapp.use()
) буде передано разом із методомinstall()
плагіна.Якщо
app.use()
викликається для того самого плагіна кілька разів, плагін буде встановлено лише один раз.Приклад
jsimport { createApp } from 'vue' import MyPlugin from './plugins/MyPlugin' const app = createApp({ /* ... */ }) app.use(MyPlugin)
Також до вашої уваги: Плагіни
app.mixin()
Застосовує глобальний міксин (в межах додатку). Глобальний міксин застосовує включені параметри до кожного екземпляра компонента в додатку.
Не рекомендується
Міксини підтримуються у Vue 3 головним чином для зворотної сумісності через їх широке використання в бібліотеках екосистем. У коді додатку слід уникати використання міксинів, особливо глобальних міксинів.
Для повторного використання логіки віддайте перевагу композиційним функціям.
Тип
tsinterface App { mixin(mixin: ComponentOptions): this }
app.provide()
Надає значення, яке можна додати до всіх компонентів-нащадків додатка.
Тип
tsinterface App { provide<T>(key: InjectionKey<T> | symbol | string, value: T): this }
Подробиці
Очікує ключ ін'єкції як перший аргумент, а надане значення як другий. Повертає сам екземпляр додатка.
Приклад
jsimport { createApp } from 'vue' const app = createApp(/* ... */) app.provide('message', 'привіт')
Усередині компонента в додатку:
jsimport { inject } from 'vue' export default { setup() { console.log(inject('message')) // 'привіт' } }
Також до вашої уваги:
app.runWithContext()
Виконує зворотній виклик з поточним додатком як контекстом ін'єкції.
Тип
tsinterface App { runWithContext<T>(fn: () => T): T }
Подробиці
Очікує функцію зворотного виклику та запускає зворотний виклик негайно. Під час синхронного виклику функції зворотного виклику, виклики
inject()
можуть шукати ін'єкції зі значень, наданих поточним застосунком, навіть якщо поточного екземпляра активного компонента немає. Також буде повернуто значення зворотного виклику.Приклад
jsimport { inject } from 'vue' app.provide('id', 1) const injected = app.runWithContext(() => { return inject('id') }) console.log(injected) // 1
app.version
Надає версію Vue, у якій було створено додаток. Це корисно в плагінах, де вам може знадобитися умовна логіка на основі різних версій Vue.
Тип
tsinterface App { version: string }
Приклад
Виконання перевірки версії в плагіні:
jsexport default { install(app) { const version = Number(app.version.split('.')[0]) if (version < 3) { console.warn('This plugin requires Vue 3') } } }
Також до вашої уваги: Глобальний API - версія
app.config
Кожен екземпляр додатку надає об’єкт config
, який містить налаштування конфігурації для цього додатку. Ви можете змінити його властивості (задокументовані нижче) перед монтуванням додатку.
js
import { createApp } from 'vue'
const app = createApp(/* ... */)
console.log(app.config)
app.config.errorHandler
Призначає глобальний обробник для не перехоплених помилок, що виникають в додатку.
Тип
tsinterface AppConfig { errorHandler?: ( err: unknown, instance: ComponentPublicInstance | null, // `info` - це інформація про помилку Vue, // напр. який хук життєвого циклу викинув помилку info: string ) => void }
Подробиці
Обробник помилок отримує три аргументи: помилку, екземпляр компонента, який викликав помилку, та інформаційний рядок із зазначенням типу джерела помилки.
Він може фіксувати помилки з таких джерел:
- Рендери компонентів
- Обробники подій
- Хуки життєвого циклу
- функція
setup()
- Спостерігачі
- Користувацькі хуки директив
- Перехідні хуки
Приклад
jsapp.config.errorHandler = (err, instance, info) => { // обробка помилки, напр. повідомлення в службу }
app.config.warnHandler
Призначає користувацький обробник для попереджень від Vue під час виконання.
Тип
tsinterface AppConfig { warnHandler?: ( msg: string, instance: ComponentPublicInstance | null, trace: string ) => void }
Подробиці
Обробник попередження отримує повідомлення попередження як перший аргумент, екземпляр вихідного компонента як другий аргумент і рядок трасування компонента як третій.
Його можна використовувати для фільтрації конкретних попереджень, щоб зменшити багатослівність консолі. Усі попередження Vue слід розглядати під час розробки, тому це рекомендується лише під час сеансів налагодження, щоб зосередитися на конкретних попередженнях серед багатьох, і слід видалити після завершення налагодження.
TIP
Попередження працюють лише під час розробки, тому ця конфігурація ігнорується в робочому режимі.
Приклад
jsapp.config.warnHandler = (msg, instance, trace) => { // `trace` — це трасування ієрархії компонентів }
app.config.performance
Встановіть для цього параметра значення true
, щоб увімкнути ініціалізацію, компіляцію, рендеринг і відстеження продуктивності компонентів на панелі продуктивності/часової шкали devtool браузера. Працює лише в режимі розробки та в браузерах, які підтримують performance.mark API.
Тип:
boolean
Також до вашої уваги: Гід - Продуктивність
app.config.compilerOptions
Налаштовує параметри компілятора під час виконання. Значення, встановлені для цього об'єкта, будуть передані компілятору шаблонів у браузері та впливатимуть на кожен компонент налаштованого додатка. Зауважте, що ви також можете змінити ці параметри для кожного компонента за допомогою параметра compilerOptions
.
Важливо
Цей параметр конфігурації враховується лише під час використання повної збірки (тобто окремого vue.js
, який може компілювати шаблони у браузері). Якщо ви використовуєте збірку лише під час виконання з налаштуваннями збірки, натомість параметри компілятора потрібно передати в @vue/compiler-dom
через конфігурації інструменту збирання.
Для
vue-loader
: передається через параметр завантажувачаcompilerOptions
. Також дивіться як його налаштувати вvue-cli
.
app.config.compilerOptions.isCustomElement
Визначає метод перевірки для розпізнавання власних користувацьких елементів.
Тип:
(tag: string) => boolean
Подробиці
Має повертати
true
, якщо тег слід розглядати як рідний користувацький елемент. Для відповідного тегу Vue візуалізує його як нативний елемент замість того, щоб намагатися вирішити його як компонент Vue.Власні теги HTML і SVG не потребують зіставлення в цій функції – аналізатор Vue розпізнає їх автоматично.
Приклад
js// розглядати всі теги, що починаються з "ion-", як користувацькі елементи app.config.compilerOptions.isCustomElement = (tag) => { return tag.startsWith('ion-') }
Також до вашої уваги: Vue і вебкомпоненти
app.config.compilerOptions.whitespace
Коригує поведінку обробки пробілів у шаблоні.
Тип:
'condense' | 'preserve'
Default:
'condense'
Подробиці
Vue видаляє / ущільнює пробіли в шаблонах, щоб отримати більш ефективний скомпільований результат. Стратегією за замовчуванням є «ущільнення» з такою поведінкою:
- Початкові / кінцеві пробіли всередині елемента ущільнюються в один пробіл.
- Пробіли між елементами, які містять символи нового рядка, видаляються.
- Послідовні пробіли в текстових вузлах ущільнюються в один пробіл.
Встановлення цього параметра на
'preserve'
вимкне (2) і (3).Приклад
jsapp.config.compilerOptions.whitespace = 'preserve'
app.config.compilerOptions.delimiters
Налаштовує роздільники, які використовуються для інтерполяції тексту в шаблоні.
Тип:
[string, string]
За замовчуванням:
['{{', '}}']
Подробиці
Це зазвичай використовується, щоб уникнути конфлікту з серверними фреймворками, які також використовують синтаксис вусів.
Приклад
js// Роздільники змінено на ES6 шаблон стилю рядка app.config.compilerOptions.delimiters = ['${', '}']
app.config.compilerOptions.comments
Налаштовує обробку коментарів HTML у шаблонах.
Тип:
boolean
За замовчуванням:
false
Подробиці
За замовчуванням Vue видаляє коментарі в продакшні. Якщо встановити для цього параметра значення
true
, Vue змусить зберігати коментарі навіть у продакшні. Коментарі завжди зберігаються під час розробки. Цей параметр зазвичай використовується, коли Vue використовується з іншими бібліотеками, які покладаються на коментарі HTML.Приклад
jsapp.config.compilerOptions.comments = true
app.config.globalProperties
Об’єкт, який можна використовувати для реєстрації глобальних властивостей, до яких можна отримати доступ з будь-якого екземпляра компонента всередині додатка.
Тип
tsinterface AppConfig { globalProperties: Record<string, any> }
Подробиці
Це заміна
Vue.prototype
в Vue 2, якого більше немає у Vue 3. Як і з усім глобальним, цим слід користуватися обережно.Якщо глобальна властивість конфліктує з власною властивістю компонента, власна властивість компонента матиме вищий пріоритет.
Використання
jsapp.config.globalProperties.msg = 'привіт'
Це робить
msg
доступним у будь-якому шаблоні компонента в додатку, а також уthis
будь-якого екземпляра компонента:jsexport default { mounted() { console.log(this.msg) // 'привіт' } }
Також до вашої уваги: Гід - Доповнення глобальних властивостей
app.config.optionMergeStrategies
Об’єкт для визначення стратегій об’єднання для користувацьких параметрів компонента.
Тип
tsinterface AppConfig { optionMergeStrategies: Record<string, OptionMergeFunction> } type OptionMergeFunction = (to: unknown, from: unknown) => any
Подробиці
Деякі плагіни / бібліотеки додають підтримку користувацьких параметрів компонентів (шляхом впровадження глобальних міксинів). Для цих параметрів може знадобитися спеціальна логіка об’єднання, коли той самий параметр потрібно «об’єднати» з кількох джерел (наприклад, міксини або успадкування компонентів).
Функцію стратегії злиття можна зареєструвати для користувацького параметра, призначивши його об'єкту
app.config.optionMergeStrategies
, використовуючи назву параметра як ключ.Функція стратегії злиття отримує значення цього параметра, визначеного в батьківському та дочірньому екземплярах як перший і другий аргумент відповідно.
Приклад
jsconst app = createApp({ // власний параметр msg: 'Vue', // параметр з міксину mixins: [ { msg: 'привіт ' } ], mounted() { // об’єднані параметри, представлені в this.$options console.log(this.$options.msg) } }) // визначити користувацьку стратегію злиття для`msg` app.config.optionMergeStrategies.msg = (parent, child) => { return (parent || '') + (child || '') } app.mount('#app') // покаже 'привіт Vue'
Також до вашої уваги: Екземпляр компонента -
$options