Skip to content

Создание Vue приложения

Экземпляр приложения

Создание любого приложения Vue начинается с создания нового экземпляра приложения с помощью функции createApp:

js
import { createApp } from 'vue'

const app = createApp({
  /* опции корневого компонента */
})

Корневой компонент

Опции, передаваемые в createApp, по сути являются опциями компонента. Каждое приложение требует наличия «корневого компонента», который может содержать другие компоненты в качестве своих дочерних элементов.

При использовании однофайловых компонентов, обычно корневой компонент импортируется из другого файла:

js
import { createApp } from 'vue'
// импорт корневого компонента App из однофайлового компонента
import App from './App.vue'

const app = createApp(App)

Хотя во многих примерах в руководстве и необходим лишь один компонент, большинство реальных приложений организованы в виде дерева вложенных, многократно переиспользуемых компонентов. Например, дерево компонентов приложения todo-списка может быть таким:

plain
App (корневой компонент)
├─ TodoList
│  └─ TodoItem
│     ├─ TodoDeleteButton
│     └─ TodoEditButton
└─ TodoFooter
   ├─ TodoClearButton
   └─ TodoStatistics

Подробнее как определять и компоновать несколько компонентов вместе разберём в последующих разделах руководства. До этого сосредоточимся на том, что происходит внутри одного компонента.

Монтирование приложения

Экземпляр приложения не будет ничего отрисовывать, пока не вызвать его метод .mount(). Он ожидает передачи «контейнера» аргументом, который может быть либо DOM-элементом, либо строкой селектора:

html
<div id="app"></div>
js
app.mount('#app')

Содержимое корневого компонента приложения будет отрисовано внутри элемента контейнера. Сам элемент контейнера при этом не считается частью приложения.

Метод .mount() следует всегда вызывать после выполнения всех конфигураций приложения и регистрации необходимых ресурсов. Также обратите внимание, что в отличие от методов регистрации ресурсов его возвращаемым значением будет экземпляр корневого компонента, а не экземпляр приложения.

Шаблон корневого компонента в DOM

При использовании Vue без этапа сборки, можно указать шаблон корневого компонента непосредственно внутри контейнера монтирования:

html
<div id="app">
  <button @click="count++">{{ count }}</button>
</div>
js
import { createApp } from 'vue'

const app = createApp({
  data() {
    return {
      count: 0
    }
  }
})

app.mount('#app')

Vue станет автоматически использовать innerHTML контейнера в качестве шаблона, если в корневом компоненте нет указанной опции template.

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

Конфигурации приложения

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

js
app.config.errorHandler = (err) => {
  /* обработка ошибки */
}

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

js
app.component('TodoDeleteButton', TodoDeleteButton)

Это сделает компонент TodoDeleteButton доступным для использования в любом месте приложения. Регистрацию компонентов и других типов ресурсов обсудим подробнее в последующих разделах руководства. Также можно посмотреть полный перечень API экземпляра приложения в справочнике API.

Убедитесь, что все конфигурации приложения применяются до его монтирования!

Несколько экземпляров приложений

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

js
const app1 = createApp({
  /* ... */
})
app1.mount('#container-1')

const app2 = createApp({
  /* ... */
})
app2.mount('#container-2')

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

Создание Vue приложенияУже загружено