插件

插件是自包含的代码,通常向 Vue 添加全局级功能。你如果是一个对象需要有install方法Vue会帮你自动注入到install 方法 你如果是function 就直接当install 方法去使用

使用插件

在使用 createApp() 初始化 Vue 应用程序后,你可以通过调用 use() 方法将插件添加到你的应用程序中。
实现一个Loading

Loading.Vue

  1. <template>
  2. <div v-if="isShow" class="loading">
  3. <div class="loading-content">Loading...</div>
  4. </div>
  5. </template>
  6. <script setup lang='ts'>
  7. import { ref } from 'vue';
  8. const isShow = ref(false)//定位loading 的开关
  9. const show = () => {
  10. isShow.value = true
  11. }
  12. const hide = () => {
  13. isShow.value = false
  14. }
  15. //对外暴露 当前组件的属性和方法
  16. defineExpose({
  17. isShow,
  18. show,
  19. hide
  20. })
  21. </script>
  22. <style scoped lang="less">
  23. .loading {
  24. position: fixed;
  25. inset: 0;
  26. background: rgba(0, 0, 0, 0.8);
  27. display: flex;
  28. justify-content: center;
  29. align-items: center;
  30. &-content {
  31. font-size: 30px;
  32. color: #fff;
  33. }
  34. }
  35. </style>

Loading.ts

  1. import { createVNode, render, VNode, App } from 'vue';
  2. import Loading from './index.vue'
  3. export default {
  4. install(app: App) {
  5. //createVNode vue提供的底层方法 可以给我们组件创建一个虚拟DOM 也就是Vnode
  6. const vnode: VNode = createVNode(Loading)
  7. //render 把我们的Vnode 生成真实DOM 并且挂载到指定节点
  8. render(vnode, document.body)
  9. // Vue 提供的全局配置 可以自定义
  10. app.config.globalProperties.$loading = {
  11. show: () => vnode.component?.exposed?.show(),
  12. hide: () => vnode.component?.exposed?.hide()
  13. }
  14. }
  15. }

Main.ts

  1. import Loading from './components/loading'
  2. let app = createApp(App)
  3. app.use(Loading)
  4. type Lod = {
  5. show: () => void,
  6. hide: () => void
  7. }
  8. //编写ts loading 声明文件放置报错 和 智能提示
  9. declare module '@vue/runtime-core' {
  10. export interface ComponentCustomProperties {
  11. $loading: Lod
  12. }
  13. }
  14. app.mount('#app')

————————————————
版权声明:本文为CSDN博主「小满zs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq1195566313/article/details/123300264