跳转到内容

创建 Vue 应用

应用实例

每个 Vue 应用都通过使用 createApp 函数创建一个新的 应用实例 开始。

js
import { createApp } from 'vue'

const app = createApp({
  /* root component options */
})

根组件

传递给 createApp 的对象实际上是一个组件。每个应用都需要一个“根组件”,它可以包含其他组件作为其子组件。

如果您正在使用单文件组件,我们通常从另一个文件导入根组件

js
import { createApp } from 'vue'
// import the root component App from a single-file component.
import App from './App.vue'

const app = createApp(App)

虽然本指南中的许多示例只需要单个组件,但大多数实际应用都是组织成嵌套的、可重用的组件树。例如,Todo 应用程序的组件树可能看起来像这样

App (root component)
├─ TodoList
│  └─ TodoItem
│     ├─ TodoDeleteButton
│     └─ TodoEditButton
└─ TodoFooter
   ├─ TodoClearButton
   └─ TodoStatistics

在指南的后续部分,我们将讨论如何定义和组合多个组件。在此之前,我们将关注单个组件内部发生的事情。

挂载应用

应用实例在调用其 .mount() 方法之前不会渲染任何内容。它期望一个“容器”参数,这可以是实际的 DOM 元素或选择器字符串。

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

应用根组件的内容将渲染在容器元素内。容器元素本身不被视为应用的一部分。

.mount() 方法应在完成所有应用配置和资产注册后调用。请注意,与资产注册方法不同,它的返回值是根组件实例而不是应用实例。

DOM 根组件模板

根组件的模板通常作为组件本身的一部分,但也可能通过直接在挂载容器内编写来单独提供模板。

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) => {
  /* handle error */
}

应用实例还提供了一些注册应用级资源的方法。例如,注册一个组件

js
app.component('TodoDeleteButton', TodoDeleteButton)

这使得 TodoDeleteButton 在我们的应用中的任何地方都可以使用。我们将在指南的后续部分讨论组件和其他类型资源的注册。您还可以在其 API 参考 中查看应用实例的完整 API 列表。

确保在挂载应用之前应用所有应用配置!

多个应用实例

您不仅仅限于在同一页面上使用单个应用实例。 createApp API 允许多个 Vue 应用在同一页面上共存,每个应用都有自己的配置和全局资源作用域。

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

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

如果您使用 Vue 来增强服务器端渲染的 HTML,并且只需要 Vue 来控制页面的特定部分,请避免在整个页面上挂载单个 Vue 应用实例。相反,创建多个小的应用实例,并将它们挂载到它们负责的元素上。

创建 Vue 应用已加载