当前位置: 首页 > news >正文

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>

http://www.lryc.cn/news/241986.html

相关文章:

  • 【Python 训练营】N_6 求素数
  • 【图论】关键路径求法c++
  • 基于51单片机电子钟万年历LCD1602显示
  • 时间复杂度和运算
  • 深入Tailwind CSS中的文本样式
  • 系统优化软件Bitsum Process Lasso Pro v12.4,供大家学习研究参考
  • 敏捷DevOps专家王立杰:端到端DevOps持续交付的5P法则 | IDCF
  • 分布式锁详解
  • Python入门学习篇(二)——算术运算符
  • 微软发布最新.NET 8长期支持版本,云计算、AI应用支持再强化
  • 达索系统3DEXPERIENCE WORKS 2024 Fabrication新功能
  • Web3与Web3.0: Web3指的是去中心化和基于区块链的网络,Web3.0指的是链接或语义网络。
  • 98、Text2Room: Extracting Textured 3D Meshes from 2D Text-to-Image Models
  • MySQL 优化器 Index Condition Pushdown下推(ICP)
  • ruoyi 若依框架采用第三方登录
  • dom api
  • 音视频项目—基于FFmpeg和SDL的音视频播放器解析(二十一)
  • Qt项目打包发布超详细教程
  • 简单递归题
  • 再生式收音机踩坑记
  • 稻谷飘香金融助力——建行江门市分行助力乡村振兴
  • 【Pytorch】Visualization of Feature Maps(1)
  • js修改浏览器地址栏里url的方法
  • 正则表达式(Java)(韩顺平笔记)
  • LLVM学习笔记(62)
  • 解决Spring Boot应用在Kubernetes上健康检查接口返回OUT_OF_SERVICE的问题
  • Java对象逃逸
  • Greenplum的数据库年龄检查处理
  • [HCIE] IPSec-VPN (IKE自动模式)
  • Qt/QML编程学习之心得:一个Qt工程的学习笔记(九)