Maison >interface Web >Voir.js >Qu'est-ce qu'un plug-in personnalisé vue3 ? Dans quels scénarios est-il utilisé ? Comment l'utiliser ?
Dans l'article sur le plug-in vue2, nous avons présenté que le plug-in est en fait une fonction améliorée de vue. Habituellement utilisé pour ajouter des fonctions globales à vue. Les fonctions des plug-ins dans vue3 sont également les mêmes, mais leur définition est différente.
Enregistrez un ou plusieurs composants globaux ou directives personnalisées via app.component() et app.directive()
Ce qui suit est un plug-in J'ai défini. Pour faciliter la gestion, dans Créer un nouveau dossier plugins dans le répertoire src En fonction de la fonction du plug-in, de nombreux fichiers js peuvent être placés dans le dossier. install()
方法的对象,也可以直接是一个安装函数本身。安装函数会接收到安装它的应用实例和传递给 app.use()
export default { install: (app, options) => { // 注入一个全局可用的方法 app.config.globalProperties.$myMethod = () => { console.log('这是插件的全局方法'); } // 添加全局指令 app.directive('my-directive', { bind (el, binding, vnode, oldVnode) { console.log('这是插件的全局指令'); } }) } }Installation du plug-inNous l'installons généralement globalement, ce qui facilite l'utilisation de plusieurs composants.
// 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">测试按钮</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/injectDans le plug-in, vous pouvez également fournir du contenu à l'utilisateur du plug-in via provide, comme ce qui suit, en passant le paramètre options à l'utilisateur du plug-in, ou uniquement dans le composant.// myPlugin.js export default { install: (app, options) => { // 注入一个全局可用的方法 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">测试按钮</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>L'effet est le suivant :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!