vue3自定義插件的作用場(chǎng)景及使用示例詳解
插件的作用場(chǎng)景
在vue2的插件那篇文章我們介紹過(guò)插件其實(shí)就是vue的增強(qiáng)功能。通常來(lái)為vue添加全局功能的。在vue3中插件的功能也是一樣的,只是它們?cè)诙x上有所不同。
- 通過(guò)app.component()和app.directive()注冊(cè)一到多個(gè)全局組件或自定義指令
- 通過(guò)app.provide()使一個(gè)資源可被注入進(jìn)整個(gè)應(yīng)用
- 向app.config.globalProperties中添加一些全局實(shí)例屬性或方法
- 一個(gè)可能上述三種都包含了的功能庫(kù)(如vue-router)
插件的定義(注冊(cè))
一個(gè)插件可以是一個(gè)擁有 install()
方法的對(duì)象,也可以直接是一個(gè)安裝函數(shù)本身。安裝函數(shù)會(huì)接收到安裝它的應(yīng)用實(shí)例和傳遞給 app.use()
的額外選項(xiàng)作為參數(shù):
下面是我定義的一個(gè)插件,為了方便管理,在src目錄下新建一個(gè)plugins文件夾,根據(jù)插件的功能,文件夾里面可以放置很多js文件。
export default { install: (app, options) => { // 注入一個(gè)全局可用的方法 app.config.globalProperties.$myMethod = () => { console.log('這是插件的全局方法'); } // 添加全局指令 app.directive('my-directive', { bind (el, binding, vnode, oldVnode) { console.log('這是插件的全局指令'); } }) } }
插件的安裝
我們一般是安裝在全局的,這樣方便多個(gè)組件使用。
// main.js import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' import myPlugin from './plugins/myPlugin' createApp(App).use(ElementPlus).use(myPlugin).mount('#app');
插件的使用
在組件中使用
<template> <div v-my-directive></div> <el-button @click="clicFunc">測(cè)試按鈕</el-button> </template> <script setup> import { getCurrentInstance } from 'vue'; const ctx = getCurrentInstance(); console.log('ctx', ctx); const clicFunc = ctx.appContext.app.config.globalProperties.$myMethod(); </script>
效果如下:
插件中的Provide/inject
在插件中,還可以通過(guò)provide為插件用戶提供一些內(nèi)容,比如像下面這樣,將options參數(shù)再傳給插件用戶,也就是組件中。
// myPlugin.js export default { install: (app, options) => { // 注入一個(gè)全局可用的方法 app.config.globalProperties.$myMethod = () => { console.log('這是插件的全局方法'); } // 添加全局指令 app.directive('my-directive', { bind () { console.log('這是插件的全局指令'); } }) // 將options傳給插件用戶 app.provide('options', options); } }
// main.js import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' import myPlugin from './plugins/myPlugin' createApp(App).use(ElementPlus).use(myPlugin, { hello: '你好呀' }).mount('#app');
// 組件中使用 <template> <div v-my-directive></div> <el-button @click="clicFunc">測(cè)試按鈕</el-button> </template> <script setup> import { getCurrentInstance, inject } from 'vue'; const ctx = getCurrentInstance(); const hello = inject('options'); console.log('hello', hello); const clicFunc = ctx.appContext.app.config.globalProperties.$myMethod(); </script>
效果如下:
以上就是vue3自定義插件的作用場(chǎng)景及使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于vue3自定義插件作用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
element的el-form和el-table嵌套使用實(shí)現(xiàn)
本文主要介紹了element的el-form和el-table嵌套使用實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Vue設(shè)置select下拉框的默認(rèn)選項(xiàng)詳解(select空白bug解決)
最近開(kāi)始學(xué)習(xí)vue,在學(xué)習(xí)的過(guò)程中遇到的問(wèn)題將記錄在這里,下面這篇文章主要給大家介紹了關(guān)于Vue設(shè)置select下拉框的默認(rèn)選項(xiàng)(select空白bug解決)的相關(guān)資料,需要的朋友可以參考下2022-12-12Vant的Tabbar標(biāo)簽欄引入自定義圖標(biāo)方式
這篇文章主要介紹了Vant的Tabbar標(biāo)簽欄引入自定義圖標(biāo)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04Vue3?響應(yīng)式系統(tǒng)實(shí)現(xiàn)?computed
這篇文章主要介紹了?Vue3?響應(yīng)式系統(tǒng)實(shí)現(xiàn)?computed,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06vue3 reactive 請(qǐng)求接口數(shù)據(jù)賦值后拿不到的問(wèn)題及解決方案
這篇文章主要介紹了vue3 reactive 請(qǐng)求接口數(shù)據(jù)賦值后拿不到的問(wèn)題及解決方案,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04vue從后端獲取到文件的?url?地址及前端根據(jù)?url?地址下載文件的實(shí)現(xiàn)思路
這篇文章主要介紹了vue?中從后端獲取到文件的?url?地址及前端根據(jù)?url?地址下載文件,項(xiàng)目用的是?vben?admin?框架,用的是?vue3?+?TS,后端返回的是文件的?url?地址,對(duì)vue后端獲取?url?地址的相關(guān)知識(shí)感興趣的朋友一起看看吧2024-02-02VUE單頁(yè)面切換動(dòng)畫代碼(全網(wǎng)最好的切換效果)
今天小編就為大家分享一篇VUE單頁(yè)面切換動(dòng)畫代碼(全網(wǎng)最好的切換效果),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10