Every Vue application starts by creating a new application instance with the createApp function:
import { createApp } from 'vue'
const app = createApp({
/* root component options */
})
Application instance must be mounted in order to render a template. This is made by calling .mount() method, which receives as argument the container element: tag name (e.g. body main) or a selector (e.g. #app .instance).
<div id="app"></div>
<script type="module">
import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
const app = createApp({
/* root component options */
})
app.mount('#app')
</script>
The root component can be specified using an object, or it can be imported from an SFC:
import { createApp } from 'vue'
// import the root component App from a single-file component.
import App from './App.vue'
const app = createApp(App)
Also, we can register components globally. This way, once we register the component we can use it anywhere in the application.
app.component('MyComponent', MyComponent)
In-DOM Root Component Template
When template option is not defined in the component, the container inner HTML is used as template. This is called «in-DOM template». It is most used on «Vue without a build step» scenarios.
<div id="app">
<button @click="count++">{{ count }}</button>
</div>
<script type="module">
import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
const app = createApp({
data() {
return {
count: 0
}
}
})
app.mount('#app')
</script>
We can have as many instances as we need. This is usually used in «Vue without a build step» scenarios, in order to control independently different parts of the page.
const app1 = createApp({
/* ... */
})
app1.mount('#container-1')
const app2 = createApp({
/* ... */
})
app2.mount('#container-2')
The application instance exposes a .config object that allows us to configure a few app-level options, for example, defining an app-level error handler that captures errors from all descendant components.
app.config.errorHandler = (err) => {
/* handle error */
}
Configurations must be applied befoure mounting the app. A list of possible configurations can be found here.
References