【vue3】封裝自定義全局插件
【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封裝性更強,只需更少的代碼。