在使用Vue3开发项目过程中,经常用到自定义组件。有些组件需要多处使用,这个时候我们就可以考虑将其组件定义为全局组件。为了减少代码的冗余,我们可以实现相应的方法使其自动引入。
全局组件的文件夹
创建存放全局组件的文件夹,让我们的代码更规范,也让我们下面实现自动引入方法更简单一些。我们创建一个
src/components文件夹,然后在该文件夹下创建一个com文件夹,用来存放全局组件。下面实现了一个全局组件demo-com,我们将其放在src/components/com文件夹下。
<template>
<div class="demo-com">
全局组件引用 demo
</div>
</template>
自动引入全局组件代码实现
- 创建一个
src/utils/globalComponent.ts文件,用来实现自动引入全局组件。
//处理首字母大写 abc => Abc
function changeStr(str: string) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
function globalCom(app: any) {
// 引入全局组件
const requireComponent = require.context(
"@/components/com/",
false,
/\.vue$/
);
requireComponent.keys().forEach(fileName => {
// 获取组件配置
const config = requireComponent(fileName);
// 获取组件名
const componentName = changeStr(
fileName.replace(/^\.\//, "").replace(/\.\w+$/, "")
);
// 注册全局组件
app.component(componentName, config.default || config);
});
}
export default globalCom;
- 在
main.ts文件中引入globalComponent方法,并调用。
import { createApp } from "vue";
import App from "./App.vue";
import globalCom from "@/utils/globalComponent";
const app = createApp(App);
globalCom(app);
app.mount("#app");
- 测试,在
Home.vue中使用全局组件demo-com。直接引入即可,无需再components中注册。
<template>
<div class="home">
......
<demo-com></demo-com>
</div>
</template>
源码下载:https://gitee.com/leolee18/vue3-project
系列文档
vue3 两种创建方式详解(cli和vite)
vue.config.js/vite.config…
vue3 自动引入自定义组件
vueX vue3自动引入匹配的modules
vue3 自定义指令控制按钮权限的操作
vuex与axios网络请求解耦
移动端rem适配布局