美文网首页
vue3插件编写

vue3插件编写

作者: 0说 | 来源:发表于2024-03-02 15:42 被阅读0次
    目录文件

    index.ts文件

    import type { App, VNode } from 'vue'
    import Loading from "./index.vue";
    import { createVNode, render } from 'vue'
    // vue.use 会调用 install 函数
    export default {
      install(app: App) {
        console.log('app', app);
        const vNode: VNode = createVNode(Loading) // 先把组件转成VNode
        render(vNode, document.body) // 通过render 函数挂载到  document.body 下
        const _exposed = vNode.component?.exposed
        app.config.globalProperties.$Loing = { // 全局挂载到 globalProperties 下
          show: _exposed?.show,
          hide: _exposed?.hide,
        }
      }
    }
    

    index.vue

    <template>
      <div v-show="showLoading" class="loading">加载中...</div>
    </template>
    <script lang='ts' setup>
    const showLoading = ref(false)
    const show = () => {
      showLoading.value = true
    }
    const hide = () => {
      showLoading.value = false
    }
    defineExpose({show, hide})
    </script>
    <style scoped>
    .loading {
      background-color: rgba(0, 0, 0, .9);
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      display: flex;
      justify-content: center;
      align-items: center;
      color: #ddd;
    }
    </style>
    

    main.ts文件

    import Loading from '@/components/Loading'
    app.use(Loading)
    
    
    type Loing = {
      show: () => void
      hide: () => void
    }
    // 声明文件扩展 固定写法
    declare module '@vue/runtime-core' {
      export interface ComponentCustomProperties {
        $Loing: Loing
      }
    }
    app.mount('#app')
    

    组件里面应用

    const instance = getCurrentInstance()
    console.log('instance', instance)
    const test = () => {
      instance?.proxy?.$Loing.show()
    }
    

    相关文章

      网友评论

          本文标题:vue3插件编写

          本文链接:https://www.haomeiwen.com/subject/sahfzdtx.html