当前位置:首页 > javascript > vue > 正文内容

vue3 插件开发

hxing6412年前 (2022-10-31)vue2617

插件是向vue添加全局功能。你如果是一个对象需要提供install方法,你如果是function就直接当install 方法去使用。

写一个loading组件供全局使用:

1)目录结构

image.png

index.ts文件内容:

import { createVNode, render, App } from 'vue'
import Loading from './index.vue'
export default {
    // 自定义组件需要install 函数
    install(app:App) {
        // 先转成虚拟dom
        const vNode = createVNode(Loading)
        render(vNode, document.body)
        // vnode中通过exposed属性获取组件导出的方法
        app.config.globalProperties.$loading = {
            show: vNode.component?.exposed?.show,
            hide: vNode.component?.exposed?.hide
        }
        console.log(vNode);
        
    }
}

index.vue文件内容

<template>
  <div v-if="showLoading">
    loading...
  </div>
</template>
<script setup>
let showLoading = ref(false)
const show = () => showLoading.value = true
const hide = () => showLoading.value = false
    defineExpose({
        show,
        hide
    })
</script>
<style scoped>
    .loading {
        position: absolute;
        left: 0;
        top: 0;
        width: 100vw;
        height: 100vh;
        background-color: rgba($color: #000000, $alpha: .8);
        color: #fff;
    }
</style>

2) 在main.ts中引入

    import loading from './components/loading'  // 组件路径
    //编写ts loading 声明文件放置报错 和 智能提示
    type LoadingTypes = {
        show: () => void,
        hide: () => void
    }
    declare module '@vue/runtime-core' {
        export interface ComponentCustomProperties {
            $loading: LoadingTypes
        }
    }
    app.use(loading)

3) 使用

    import { getCurrentInstance} from 'vue'
    const  instance = getCurrentInstance()  
    instance?.proxy?.$Loading.show()
    setTimeout(()=>{
      instance?.proxy?.$Loading.hide()
    },5000)


扫描二维码推送至手机访问。

版权声明:本文由星星博客发布,如需转载请注明出处。

本文链接:https://xingxinghan.cn/?id=406

分享给朋友:

“vue3 插件开发” 的相关文章

vue3 ref,shallowRef, triggerRef, customRef

ref深层次响应变成响应式const name = ref('refName') name.value = 'newName'shallowRef浅层次响应const obj = sha...

uniapp h5设置代理解决跨域问题

在manifest.json文件中 h5 属性中加入如下代码:"h5": {     "devServer": {       &nbs...

【Vue】详解Vue组件系统

Vue是一款流行的JavaScript框架,它的组件系统是它最重要的特性之一。Vue组件系统允许开发人员将UI界面划分成独立、可重复使用的组件,从而提高代码的可维护性和可重用性。本文将详细介绍Vue组件系统的各个方面。组件的定义在Vue中,一个组件是由一个Vue实例构成的。组件通常包含一个模板、一个...

uniapp 中 ScrollView 组件上拉分页怎么不滚动到最顶部

实现类似微信聊天页面,上拉加载更多历史聊天记录,每次上拉到顶部,界面自动会滚动到最顶部,我希望ScrollView不要滚动到最顶部,每次就停留在当前位置1,绑定scroll-view中scroll-into-view属性<scroll-view class="scroll-...

Vue中的防抖节流技术,提升用户交互体验

在Vue开发中,我们经常会遇到需要处理用户频繁操作的场景,例如搜索框输入联想、窗口大小改变等。这时,使用防抖节流技术能够有效地控制事件触发频率,提升用户体验和页面性能。 1. 防抖技术 防抖(Debounce)是指在事件被触发后,等...

uniapp运行APP报错reportJSException >>>> exception function:createInstanceContext, exception:white screen

今天分享个自己在工作中遇到的头疼问题,记录下,在使用pinia时,引入use模块,h5端没问题,我使用的是vue3,运行在APP端一直报错:reportJSException >>>> exception function:createInstanceContext, exc...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。