创建应用实例
# 应用实例
每个Vue应用都需要一个应用实例,创建方法如下:
import { createApp } from 'vue'
const app = createApp({
/* 根组件选项 */
})
1
2
3
4
5
2
3
4
5
里面的app
就是一个应用实例
而createApp
中的参数就是一个组件component
,这个组件将会成为这个应用的根组件,其他组件将作为其子组件
# 挂载应用
一个应用实例必须挂载后才能被渲染,渲染实例使用的方法为.mount()
,该方法接收一个“容器”参数,可以是一个实际的DOM元素或是一个CSS选择器字符串
<div id="app"></div>
1
//这里挂载的就是一个通过CSS id选择器选择的div
app.mount('#app')
1
2
2
挂载之后,应用根组件的内容将会被渲染在所挂载的应用元素里面。容器元素自身将不会被视为应用的一部分。
.mount()
方法应该始终在整个应用配置和资源注册完成后被调用。同时请注意,不同于其他资源注册方法,它的返回值是根组件实例而非应用实例。
Vue3.0应用挂载示例:
<!--App.vue文件-->
<template>
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
1
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
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
//main.js文件
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')
1
2
3
4
5
6
2
3
4
5
6
非构建流程的应用挂载:
<div id="app">
<button @click="count++">{{ count }}</button>
</div>
1
2
3
2
3
import { createApp } from 'vue'
const app = createApp({
data() {
return {
count: 0
}
}
})
app.mount('#app')
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 应用配置
应用实例会暴露一个.config
对象允许我们配置一些应用级的选项,例如定义一个应用级的错误处理器,用来捕获所有子组件上的错误:
app.config.errorHandler = (err) => {
/* 处理错误 */
}
1
2
3
2
3
应用实例还提供了一些方法来注册应用范围内可用的资源,例如注册一个组件:
app.component('TodoDeleteButton', TodoDeleteButton)
1
这使得TodoDeleteButton
在应用的任何地方都是可用的。
注意,确保在挂载应用实例之前完成所有应用配置,即写在.mount()
方法之前
# 多个应用实例
应用实例并不只限于一个。createApp API
允许你在同一个页面中创建多个共存的 Vue 应用,而且每个应用都拥有自己的用于配置和全局资源的作用域。
const app1 = createApp({
/* ... */
})
app1.mount('#container-1')
const app2 = createApp({
/* ... */
})
app2.mount('#container-2')
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
如果你正在使用 Vue 来增强服务端渲染 HTML,并且只想要 Vue 去控制一个大型页面中特殊的一小部分,应避免将一个单独的 Vue 应用实例挂载到整个页面上,而是应该创建多个小的应用实例,将它们分别挂载到所需的元素上去。
编辑 (opens new window)
上次更新: 2024/05/30, 07:49:34