Vue3 插件封装

实际开发项目的时候,有些组件需要再项目的很多地方调用,比如弹框、loading组件,这个时候我们可以封装一个全局插件,然后直接在项目的入口文件(main.js或main.ts)中进行引入、注册,就可以在项目的各个地方使用了。

创建全局插件

创建一个 vuePlugin 文件夹,在该文件夹下创建一个 index.vue 文件和一个 index.ts 文件

index.vue 主要用来编写插件的结构、样式和逻辑,并通过 defineExpose() 方法将插件的属性、方法暴露出去,如下:

<template>
    <div v-if="isShow">我是一个Vue全局插件</div>
</template> 
<script setup lang="ts">
    import { ref } from "vue";
    const isShow=ref(false)
    const show=()=>isShow.value=true
    const hide=()=>isShow.value=false
    // defineExpose() 方法用来暴露组件的方法和属性,以便可以被外部访问
    defineExpose({
        isShow,
        show,
        hide
    })
</script>

index.ts 主要编写插件的安装、挂载逻辑,并将插件暴露出去,如下:

import { createVNode,render } from "vue";
import type {App,VNode} from 'vue'
import VuePlugin from "./index.vue";
export default {
    install(app:App){
        //将组件对象转成虚拟 dom 节点
        const vNode:VNode=createVNode(VuePlugin) 
        //通过 render() 方法将虚拟节点挂载到 body 身上,以便可以全局访问
        render(vNode,document.body) 
        // 通过 app.config.globalProperties 将 vuePlugin 组件的方法挂载到全局
        app.config.globalProperties.$vuePlugin={
            show:()=>vNode.component?.exposed?.show(),
            hide:()=>vNode.component?.exposed?.hide()
        }
    }
}

注册全局插件

在入口文件 main.ts 中引入并注册上面封装的插件,如下:

import './assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'
import VuePlugin from './components/VuePlugin' //引入 VuePlugin 插件
const app = createApp(App)

app.use(createPinia())
app.use(router)
app.use(VuePlugin) //app.use()方法用来注册插件

app.mount('#app')

// 如下定义了 VuePlugin 插件的相关类型及声明文件,防止报错
type Vplugin={
    show:()=>void,
    hide:()=>void
}
declare module '@vue/runtime-core' {
    export interface ComponentCustomProperties {
        $vuePlugin : Vplugin
    }
}

插件使用

在组件中直接使用插件,如下:

<script setup lang="ts">
import {getCurrentInstance} from 'vue'
const app=getCurrentInstance() //获取组件实例
app?.proxy?.$vuePlugin.show() //使用插件
</script>

<template>
  <div>我是页面中的一个组件</div>
</template>

vue插件的封装总结:

1. 主要是在插件的 install 方法中,定义如何将插件的功能集成进Vue应用;

2. 使用 export default 导出插件主体;

3. 在Vue应用的入口文件(通常是main.js或main.ts)中,导入创建的插件,并使用 app.use() 方法将其安装到应用中,这样插件提供的功能就可以在整个应用中使用了。 

Vue3中,我们可以通过封装Websocket类来实现对Websocket的使用。通过引用和可以得知,在Vue3中使用Websocket可以实现实时数据传输。为了方便使用,我们可以封装一个好用的Websocket类。具体步骤如下: 1. 首先,安装Websocket的依赖,可以通过npm或yarn等包管理工具进行安装。 2. 创建一个Websocket类,该类应该包含Websocket的连接、发送消息和接收消息的方法。可以参考引用中提到的封装Websocket类的方法。 3. 在Vue3中,可以将Websocket类封装成一个Vue插件,以便全局使用。具体步骤如下: - 创建一个插件文件,例如`websocket-plugin.js`。 - 在插件文件中,引入Websocket类并创建一个Vue插件对象。 - 在插件对象的`install`方法中,将Websocket实例挂载到Vue的原型上,以便在组件中可以通过`this.$websocket`来访问Websocket实例。 - 最后,导出该插件对象。 - 示例代码如下: ```javascript import Websocket from './websocket.js'; const WebsocketPlugin = { install(Vue) { Vue.prototype.$websocket = new Websocket('ws://localhost:8080'); }, }; export default WebsocketPlugin; ``` 4. 在Vue项目中,将该插件引入并使用。可以在`main.js`或其他入口文件中使用`app.use()`方法来安装该插件。示例代码如下: ```javascript import { createApp } from 'vue'; import App from './App.vue'; import WebsocketPlugin from './websocket-plugin.js'; const app = createApp(App); app.use(WebsocketPlugin); app.mount('#app'); ``` 通过以上步骤,我们就可以在Vue3中封装Websocket,并在全局范围内使用了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [基于Vue3封装一个好用的Websocket](https://blog.csdn.net/qq_27244301/article/details/130098672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值