1.找个地方放这种vue插件,放在src/components 新建文件夹 loading包含一个文件夹types(用来存放约束或者导出) 一个loading.vue文件

2.types.ts内容
import { App, createVNode, render, VNode } from "vue";
import Loading from "../loading.vue"
export default {
install(app: App) {
const vNode: VNode = createVNode(Loading)
render(vNode, document.body)
console.log(vNode.component?.exposed);
app.config.globalProperties.$loading = {
show: vNode.component?.exposed?.show,
hide: vNode.component?.exposed?.hide,
}
}
}
3.loading.vue内容
<template>
<!-- 自定义vue插件 -->
<div class="loading" v-if="isShow">
<div class="loading_content">Loading...</div>
</div>
</template>
<script setup lang="ts">
let isShow = ref<boolean>(false);
const show = () => {
isShow.value = true;
console.log("显示");
};
const hide = () => {
isShow.value = false;
console.log("隐藏");
};
defineExpose({
isShow,
show,
hide,
});
</script>
<style lang="less" scope>
.loading {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.3);
display: flex;
justify-content: center;
align-items: center;
&_content {
font-size: 30px;
color: #fff;
}
}
</style>
4.main.ts文件引入和挂载
import Loading from "./components/loading/types/types"
let app = createApp(App)
app.use(Loading)
app.mount('#app')
5.页面使用app.vue页面 直接使用即可,如果需要在setup使用则通过 getCurrentInstance获取当前实例的方式使用
<div>
{{ $loading.show() }}
</div>
6.效果
