示例:
// 定义一个插件对象
const MyPlugin = {
// 定义 install 方法
install(Vue) {
// 添加全局方法或属性
Vue.myGlobalMethod = function() {
// 全局方法逻辑
};
// 添加全局指令
Vue.directive('my-directive', {
bind(el, binding, vnode, oldVnode) {
// 全局指令逻辑
}
});
// 添加实例方法
Vue.prototype.$myMethod = function(methodOptions) {
// 实例方法逻辑
};
}
};
// 使用插件
Vue.use(MyPlugin);
Vue.use = function (plugin) {
// 插件缓存
const installedPlugins = this._installedPlugins || (this._installedPlugins = []);
// 检查是否已经安装过该插件,如果是则直接返回
if (installedPlugins.indexOf(plugin) > -1) {
return this;
}
// 整合除了第一个参数(plugin)之外的其他参数为数组
const args = toArray(arguments, 1);
// 将 Vue 实例作为第一个参数放入数组中
args.unshift(this);
// 判断插件类型并安装
if (typeof plugin.install === "function") {
// 如果插件是一个对象,则调用其 install 方法
plugin.install.apply(plugin, args);
} else if (typeof plugin === "function") {
// 如果插件是一个函数,则直接调用该函数
plugin.apply(null, args);
}
// 将插件缓存起来
installedPlugins.push(plugin);
// 返回 Vue 实例
return this;
};
Vue3 中使用app.use进行插件的注册,原理同 Vue2~