Plugins 外掛,好奇有什麼好用的外掛嗎?
外掛用的好~開發沒煩惱 www
能客製化外掛也是蠻重要的~~
插件是自包含的代碼,通常用於為 Vue 添加應用級別的功能。這是安裝插件的方法:
import { createApp } from 'vue'
const app = createApp({})
app.use(myPlugin, {
/* 可選配置 */
})
插件可以定義為一個暴露 install()
方法的物件,或者作為安裝函數本身的函數。install
函數接收應用實例以及傳遞給 app.use()
的額外選項(如果有):
const myPlugin = {
install(app, options) {
// 配置應用
}
}
插件沒有嚴格定義的範圍,但插件有以下常見的用途:
app.component()
和 app.directive()
註冊一個或多個全局組件或自定義指令。app.provide()
使資源可在整個應用中注入。app.config.globalProperties
來添加一些全局實例屬性或方法。需要執行上述操作組合的庫(例如 vue-router
)通常會使用插件。
在 Vue 中,組件(Component)和外掛(Plugin)有不同的用途和功能,以下是它們的主要差異:
app.use()
方法進行安裝,並且可以在全局範圍內影響應用。data
、methods
、computed
)的形式進行定義,並且有明確的輸入(props)和輸出(事件)。install
方法,負責配置應用的全局屬性或方法。簡而言之,組件主要用於構建 UI 元素,而外掛則用於擴展應用的功能。在實際開發中,通常會結合使用組件和外掛,以便更有效地開發和管理 Vue 應用。
為了更好地理解如何創建自己的 Vue.js 外掛,我們將創建一個非常簡化的外掛,顯示 i18n(國際化)的字符串。
首先,我們將設置外掛對象。建議在單獨的文件中創建並導出它,以保持邏輯的封裝和分離,示例如下:
// plugins/i18n.js
export default {
install: (app, options) => {
// 外掛代碼在這裡
}
}
我們希望創建一個翻譯函數。這個函數將接收一個以點分隔的鍵字符串,並用來在用戶提供的選項中查找翻譯字符串。這是模板中的預期用法:
<h1>{{ $translate('greetings.hello') }}</h1>
由於這個函數應該在所有模板中全局可用,我們將通過將其附加到 app.config.globalProperties
中來實現:
// plugins/i18n.js
export default {
install: (app, options) => {
// 注入全局可用的 $translate() 方法
app.config.globalProperties.$translate = (key) => {
// 使用 `key` 作為路徑來檢索 `options` 中的嵌套屬性
return key.split('.').reduce((o, i) => {
if (o) return o[i]
}, options)
}
}
}
我們的 $translate
函數將接受像 greetings.hello
的字符串,查看用戶提供的配置並返回翻譯的值。
包含翻譯鍵的對象應在安裝期間通過額外的參數傳遞給外掛:
import i18nPlugin from './plugins/i18n'
app.use(i18nPlugin, {
greetings: {
hello: 'Bonjour!'
}
})
現在,我們的初始表達式 $translate('greetings.hello')
將在運行時被替換為 Bonjour!
。
另見: Augmenting Global Properties
提示:儘量少用全局屬性,因為如果在應用中使用太多不同外掛注入的全局屬性,可能會快速變得混淆。
外掛也允許我們使用注入(inject)來提供函數或屬性給外掛的使用者。例如,我們可以讓應用程序訪問選項參數,以便使用翻譯物件。
// plugins/i18n.js
export default {
install: (app, options) => {
app.provide('i18n', options)
}
}
現在,外掛使用者將能夠使用 i18n
鍵將外掛選項注入到他們的組件中:
<script setup>
import { inject } from 'vue'
const i18n = inject('i18n')
console.log(i18n.greetings.hello)
</script>
如果您還想為他人構建並發佈您的外掛,請參閱 Vite 的庫模式部分。
寫外掛感覺可以更了解全局的應用~
有機會想來寫一些有趣的外掛
再來繼續練習吧~~