Skip to main content

Vue 插件 & 全局属性或方法

一、插件的定义

插件 (Plugins) 是对 Vue 全局功能的增强或补充。

二、插件的使用

1、编写插件

插件是一个拥有 install() 方法的对象,也可以直接是一个安装函数本身。编写插件如下:

const myPlugin = {
install(app, options) {
// 配置此应用
}
}

2、插件注册

插件可通过 app.use() 的方式进行全局注册:

main.js
import { createApp } from 'vue'

const app = createApp({})

app.use(myPlugin, {
/* 可选的选项 */
})

三、插件的应用

这里以组件库的全局注册为例,在每个组件下单独导出组件 Plugin

components/button/index.ts
import { App, Plugin } from 'vue';
import Button from './button.vue';

export const ButtonPlugin: Plugin = {
install(app: App) {
app.component('i-button', Button);
},
};

export { Button };

再将所有组件 Plugin 整合为一个插件:

components/index.ts
import { App, Plugin } from 'vue'
import { ButtonPlugin } from './button'
import { IconPlugin } from './icon'
// ...

const IDesignPlugin: Plugin = {
install(app: App) {
ButtonPlugin.install?.(app)
IconPlugin.install?.(app)
// ...
}
}

export * from './button'
export * from './icon'
// ...

export default IDesignPlugin

对整合后的组件库以插件的方式进行全局注册:

src/main.ts
import { createApp } from 'vue'
import App from './App.vue'
import iDesign from '../components'

createApp(App).use(iDesign).mount('#app')

四、全局实例属性或方法

可通过 app.config.globalProperties 注册能够被应用内所有组件实例访问到的全局属性或方法。

注册:

import { createApp } from 'vue';
import App from './App.vue';

const app = createApp(App);

// 可以通过注册插件的方式
const myPlugin = {
install(app) {
app.config.globalProperties.xx = '123';
},
};
app.use(myPlugin);

// 也可以直接注册
// app.config.globalProperties.xx = '123';

app.mount('#app');

在任意组件模板上可直接使用该全局属性或方法,如果想在 <script setup> 中也访问到,需要使用 getCurrentInstance

<template>
{{ xx }}
</template>

<script setup>
import { getCurrentInstance } from 'vue';

const app = getCurrentInstance().appContext.app;
console.log(app.config.globalProperties.xx);
</script>