【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封装性更强,只需更少的代码。

最新文章

  1. 游戏服务器菜鸟之C#初探一游戏服务
  2. 优化MySQL数据库性能的八大方法
  3. 使用js设置input标签只读 readonly 属性
  4. 【BZOJ-1040】骑士 树形DP + 环套树 + DFS
  5. SQL各种连接查询详解(左连接、右连接..)
  6. json 增删改 加 排序
  7. Delphi 操作word 表格
  8. iOS开发笔记 基于wsdl2objc调用asp.net WebService
  9. Android dialog 问题
  10. 理解并解决GBK转UTF-8奇数中文乱码(转)
  11. jQuery无限级联下拉框插件
  12. SignalR的一点点东西
  13. 【Centos】yum 安装mariaDB
  14. ofBiz-groovy-freemarker
  15. java集合框架整理
  16. Java开发笔记(十八)上下求索的while循环
  17. PHP后台图片上传作品 接口
  18. 牛客网暑期ACM多校训练营(第二场)J farm (二维树状数组)
  19. go 学习 ---golang命令
  20. 如何使用JSON格式 POST数据到服务器

热门文章

  1. SpringMVC的注解关键词解释
  2. RWLock——一种细粒度的Mutex互斥锁
  3. [008] - JavaSE面试题(八):集合
  4. 【论文阅读】End to End Learning for Self-Driving Cars
  5. Python+Request库+第三方平台实现验证码识别示例
  6. springMVC-1-servlet回顾
  7. 扩展中国剩余定理(exCRT)
  8. Tbase读写分离与分库分表
  9. odoo中接口开发
  10. 看视频学Bootstrap—在微软虚拟学院学习Bootstrap