本文将介绍如何注册在整个 Vue 应用程序中使用的 Vue3 全局组件。这与我们在 Vue2 中声明它们的方式有些许不同,但是却很简单。

什么是 Vue 全局组件?

首先,我们必须了解 Vue3 全局组件是什么以及为什么要使用它。

通常,当我们想在 Vue 实例中包含一个组件时,我们会在本地注册它。通常看起来像这样。

<script>
import TkBadge from '../components/TkBadge.vue';

export default {
  components: {
    TkBadge
  }
}
</script>

但是,假设有一个组件,我们需要在 Vue 项目中多次使用它。在每个文件中本地注册此组件可能会很麻烦,尤其是在我们重构了项目或进行某些操作的情况下。

在这种情况下,全局注册组件可能会很有用,使它可以在我们的 Vue 实例的所有子组件中访问。换句话说,全局注册一个组件意味着我们不必将其导入每个文件中。

让我们看一下如何在 Vue2 中完成此操作以及现在如何在 Vue3 中进行操作。

Vue2 全局组件

在 Vue2 中,无论我们在哪里创建 Vue 实例,我们都只需要调用 Vue.component 方法来注册全局组件。

此方法有两个参数:

  • 我们全局组成部分的名称
  • 组件本身

一个简单的实例:

import Vue from 'vue'
import TkBadge from './components/TkBadge'
import App from './App.vue'

Vue.component('TkBadge', TkBadge) // 全局注册 - 我们可以在任何地方使用

new Vue({
  render: h => h(App)
}).$mount('#app')

现在,此 TkBadge 组件可以在此 Vue 实例的所有子组件中使用!

Vue3 全局组件

在 Vue3 中,由于创建我们的 Vue 实例(使用 createApp)的工作方式略有不同,因此代码略有不同,但是它很容易理解。

首先必须创建应用程序,而不是从 Vue 对象中声明全局组件。然后,我们可以像以前一样运行相同的 component() 方法。

import { createApp } from 'vue'
import TkBadge from './components/TkBadge'
import App from "./App.vue"

const app = createApp(App)

app.component('TkBadge', TkBadge)

app.mount('#app')

如您所见,它们非常相似,但是 Vue 实例的初始化方式略有不同,使我们对语法进行了一些更改。

现在,你可以在根实例提供的任何组件中使用。

建议

  • 重要的是要仔细考虑何时要使用全局组件还是本地组件。
  • 如果默认情况下只是将所有内容都设为全局组件,则意味着即使不使用组件,该组件仍将包含在我们的构建中,增加页面加载时间。
  • 正确使用全局组件可以成为非常强大的工具,并且随着 Vue3 中的新变化,在 Vue 项目中仍然很容易使用这些类型的组件。