Vue3封装全局插件

定义一个全局加载组件

一、首先定义dom元素

定义一个index.vue文件

复制代码
<template>
    <div class="loading">
        loading...
    </div>
</template>
<script setup lang="ts">

</script>
<style scoped>
.loading {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 30px;
    color: #fff;
    background: rgba(0, 0, 0, 0.8);
    height: 100vh;
}
</style>

第二步给dom元素添加,控制显示的开关和方法,然后通过defineExpose暴露出去

复制代码
<script setup lang="ts">
import { ref } from "vue"
const isShow = ref<boolean>(false);
const show = () => {
    isShow.value = true
}
const hide = () => {
    isShow.value = false
}
defineExpose({
    isShow,
    show,
    hide
})
</script>
二、把组件渲染到全局

定义一个index.ts把组件暴露出去

createVNode创建虚拟节点,render把节点渲染到body,然后创建一个全局变量方便操作$Loading

复制代码
import type { App, VNode } from "vue"
import { createVNode, render } from 'vue'
import loading from './index.vue'
export default {
    install(app: App) {
        const Vnode: VNode = createVNode(loading);
        render(Vnode, document.body)
        app.config.globalProperties.$Loading = {
            show: Vnode.component?.exposed?.show,
            hide: Vnode.component?.exposed?.hide,
        }
    }
}
三、注册组件
复制代码
import { createApp } from 'vue'
import App from './App.vue'
import loading from './components/loading'

const app = createApp(App)

type Lod = {
    show():void,
    hide():void
}

declare module 'vue' {
    export interface ComponentCustomProperties {
        $Loading: Lod
    }
}

app.use(loading)
app.mount('#app')

使用

复制代码
<template>
  <div class="">

  </div>
</template>
<script setup lang="ts">
import { getCurrentInstance } from 'vue';
const app = getCurrentInstance();
app?.proxy?.$Loading.show();
setTimeout(() => {
  app?.proxy?.$Loading.hide();
}, 2000)
</script>
<style scoped></style>
相关推荐
触底反弹14 分钟前
面试被问 RAG 只能说出六个字?这篇用 100 行 Node.js 代码帮你彻底搞懂
javascript·人工智能·面试
Highcharts16 分钟前
@highcharts/react完整技术指南|新版Highcharts React使用、迁移、SSR、TS 优化全解
前端·javascript
c2385629 分钟前
HTTP 超文本传输协议全解:Web 世界的通信规则
前端·网络协议·http
gis开发之家29 分钟前
vue3组合式函数(Composables)的艺术——将业务逻辑从UI组件中连根拔起
前端·javascript·vue.js·前端框架·vue3·前端工程化·前端架构
uuai38 分钟前
vue导出pdf
前端·vue.js·pdf
小爷毛毛_卓寿杰1 小时前
我和 TRAE AI聊了聊,它帮我为五迷老师们做了个城市漫游小程序!
前端·人工智能·后端
liuniansilence1 小时前
一次讲透 H5 唤起原生 App:Scheme 协议、平台限制与生产级封装
前端·javascript
heiyehk1 小时前
我用AI不断迭代到7W行代码的项目-像素画编辑器
前端·架构·设计
用户938515635071 小时前
从“问答机器”到“智能体”:AI Agent 是如何自主工作的?
javascript·人工智能·全栈
weedsfly1 小时前
前端懒加载全家桶:图片、路由、组件的按需加载
前端·javascript·面试