【vue3】封装自定义全局插件

原vue2方法

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import plugin from './···/plugin/index' //安装自定义的插件
Vue.use(plugin); new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')

index.js

import Plugin from "./Plugin";

const plugin = {};

/**
* Vue: 在main.js中Vue.use时会自动传入vue实例作为实参
* 同时会自动执行install函数
*/
plugin.install = function(Vue) {
//1、创建组件构造器
const pluginConstructor = Vue.extend(Plugin); //2、new的方式,根据组件构造器,可以创建出来一个组件对象
const plugin = new pluginConstructor(); //3、将组件对象,手动挂载到某一个元素上
plugin.$mount(document.createElement("div")); //4、plugin.$el对应的就是上面挂载的div
document.body.appendChild(plugin.$el); //5、定义Vue.$plugin的全局访问
Vue.prototype.$plugin = plugin;
}; export default plugin; //将plugin导出

plugin.vue(自定义的组件)

<template>
<div>
</div>
</template> <script>
export default {
name: "Plugin",
}
</script> <style scoped>
</style>

vue3的思路和vue2相同,只是执行的方法有区别。

vue3方法

区别

- use(plugin)自动调用install函数时
vue2: 自动传入Vue实例
vue3: 自动传入App应用实例
- 挂载组件
vue2: Vue.extend(plugin) + 构造器实例化 + 挂载
vue3: createApp(plugin) + 挂载
- 定义全局访问
vue2: Vue.prototype.$plugin
vue3: app.config.globalProperties.$plugin

main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import plugin from "···/plugin/index"; createApp(App).use(store).use(router).use(plugin).mount('#app');

index.js

import Plugin from "./Plugin";
import {createApp} from 'vue' const plugin = {}; plugin.install = function(app) {
//1、实例化并绑定组件
const plugin = createApp(Plugin);
const instance = plugin.mount(document.createElement("div")); //2.将挂载的Node添加到body中
document.body.appendChild(instance.$el); //3、定义全局
app.config.globalProperties.$plugin = instance;
}; export default plugin;

整体思路相同,可见vue3封装性更强,只需更少的代码。

【vue3】封装自定义全局插件的更多相关文章

  1. vue3系列:vue3.0自定义全局弹层V3Layer|vue3.x pc桌面端弹窗组件

    基于Vue3.0开发PC桌面端自定义对话框组件V3Layer. 前两天有分享一个vue3.0移动端弹出层组件,今天分享的是最新开发的vue3.0版pc端弹窗组件. V3Layer 一款使用vue3.0 ...

  2. 浅析vue封装自定义插件

    在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件. 在开始之前,先补充一句,其实利用vue封装 ...

  3. 使用 vue3 的自定义指令给 element-plus 的 el-dialog 增加拖拽功能

    element-plus 提供的 el-dialog 对话框功能非常强大,只是美中不足不能通过拖拽的方式改变位置,有点小遗憾,那么怎么办呢?我们可以通过 vue 的自定义指令来实现一个可以拖拽的对话框 ...

  4. 自定义Angular插件 - 网站用户引导

    最近由于项目进行了较大的改版,为了让用户能够适应这次新的改版,因此在系统中引入了“用户引导”功能,对于初次进入系统的用户一些简单的使用培训training.对于大多数网站来说,这是一个很常见的功能.所 ...

  5. 【jQuery基础学习】08 编写自定义jQuery插件

    目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件.这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率. jQuery插件的类型: 封装对象方 ...

  6. 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用

    刚完成一些前端项目的开发,腾出精力来总结一些前端开发的技术点,以及继续完善基于SqlSugar的开发框架循序渐进介绍的系列文章,本篇随笔主要介绍一下基于Vue3+TypeScript的全局对象的注入和 ...

  7. mvc自定义全局异常处理

    异常信息处理是任何网站必不可少的一个环节,怎么有效显示,记录,传递异常信息又成为重中之重的问题.本篇将基于上篇介绍的html2cancas截图功能,实现mvc自定义全局异常处理.先看一下最终实现效果: ...

  8. 自定义jQuery插件Step by Step

    1.1.1 摘要 随着前端和后端技术的分离,各大互联网公司对于 Mobile First理念都是趋之若鹜的,为了解决网页在不同移动设备上的显示效果,其中一个解决方案就是Responsive Desig ...

  9. 自定义 Cordova插件(基础篇)

    cordova自定义插件 注意:存放自定义cordova插件目录不能有空格可能会报错 cordova的安装 下载node.js,安装完成后你可以在命令行中使用node和npm. 安装cordova使用 ...

随机推荐

  1. 在Java中如何高效判断数组中是否包含某个元素

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

  2. buu [V&N2020 公开赛]strangeCpp

    拖入ida,静态调试一下,本来想动调的,发现一直缺dll.没办法,只能头铁,静态 找到主函数,然后并没有发现什么,找了半天,没结果,后面也是看了大佬wp,才找到解决方式,感觉这种只能通过动调来找到关键 ...

  3. 报错处理:end Kernel panic - not syncing: Out of memory and no killable processes

    报错如下: end Kernel panic - not syncing: Out of memory and no killable processes [ 2.113892] [<fffff ...

  4. c盘爆满清理解决方案----Dism

    前言:在以前windons操作系统,很容易导致c盘爆满,原因了就那么几个,升级,app默认安装,打补丁等等.还有种蛇皮现象,就是无缘无故c盘就标红了,进去看看,又个c盘的系统文件,不敢删了,怕系统就崩 ...

  5. python log装饰器

    def log(func): #将原函数对象的指定属性复制给包装函数对象, 默认有 module.name.doc,或者通过参数选择 @functools.wraps(func) def wrappe ...

  6. Nacos配置中心功能

    目录 Nacos的配置管理模型 命名空间(Namespace) 配置分组(Group) 配置集(Data ID) 配置项 一个最佳实践 命名空间管理 配置管理 参考 Nacos的配置管理模型 对于Na ...

  7. Mongo基于Java基本操作

    1.使用Maven依赖相应jar <dependency> <groupId>org.mongodb</groupId> <artifactId>mon ...

  8. 三、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Mvvm的08-12示例

    这一篇是学习了前2篇RegionManager关联视图,和通过不同的方式加载Module示例之后的开始进入MVVM了. 从第08示例开始,进入了MVVM部分. 从08示例开始学习Prism下的MVVM ...

  9. Java 8 Function 函数接口

    这篇文章属于 Java 8 教程(LTS)系列教程 在 Java 8 中,Function 接口是一个函数接口,它位于包 java.util.function 下. Function 接口中定义了一个 ...

  10. if函数+isna函数+vlookup函数实现不同列相同单元格内容排列在同一行

    1,首先学习的网址:https://jingyan.baidu.com/album/22a299b5dd0f959e19376a22.html?picindex=1 2,excel 这也许是史上最好最 ...