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

vue3 插件开发

hxing6413年前 (2022-10-31)vue2919

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

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

1)目录结构

image.png

index.ts文件内容:

TypeScript
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文件内容

Markup
<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中引入

JavaScript
    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) 使用

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

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

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

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

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

uniapp webview设置不全屏,设置自定义导航栏

使用webview时默认填充整个屏幕的,这时候我们加个自己的导航栏被遮住出不来,所以我们需要自定义webview的高度,才能显示出导航栏,传入导航栏高度(单位px),调用下面方法即可// 自定义webview高度 function setWebview(offset) ...

Vue中的父子组件通讯及使用sync同步父子组件数据

在Vue.js中,组件通讯是一个非常重要的主题。特别是在处理父子组件之间的通讯时,我们需要了解不同的方式来传递数据和响应事件。本文将介绍Vue中父子组件通讯的几种方式,并重点讨论使用sync属性来实现父子组件数据的双向绑定。父子组件通讯 在Vue中,父组件可以通过prop向子组件传递数据,而子组件则...

Vue.js 系列教程:深入理解组件、Props和Slots

Vue.js 是一款流行的 JavaScript 框架,它提供了一种组件化的开发方式,使得构建复杂的用户界面变得更加简单和高效。 在本篇教程中,我们将深入探讨 Vue.js 中的组件、Props 和 Slots 的概念和用法。 组件...

Vue中Mixin的应用与实践

在Vue.js中,Mixin是一种非常有用的技术,它允许我们将可复用的功能和逻辑抽象出来,并混入到组件中,从而实现代码的复用和组件的扩展。本文将深入探讨Vue中Mixin的应用与实践,包括Mixin的基本概念、实际应用场景以及相关的代码示例,最终总结如何合理地应用和实践Mixin特性。...

vue3源码学习api-vue-sfc文件编译

vue 最有代表性质的就是.VUE 的文件,每一个vue文件都是一个组件,那么vue 组件的编译过程是什么样的呢 Vue 单文件组件 (SFC)和指令 ast 语法树 一个 Vue 单文件组件 (SFC),通常使...

Vue2 和 Vue3的区别详解

I. 引言 A. Vue.js的简介和背景 Vue.js 是一款流行的前端 JavaScript 框架,由尤雨溪于2014年创建。它专注于视图层,采用了类似 Angular 的双向数据绑定和 React 的组件化思想,使得开发者可以更便捷地构建交互式的...

发表评论

访客

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