Vue.use的使用和基本原理

简介: Vue.use的使用和基本原理

介绍与使用

Vue.use() (vue2.x是Vue.use,vue3.x是app.use)在 vue 中使用很多,比如 ElementUI, vantUI, VueI18n, Router, Vuex 等部分第三方库、组件、自定义方法等,在引用后会使用 Vue.use 将他们传入作为参数使用


如下:


vue2.x使用Vue.use()

importVuefrom'vue';
importAppfrom'./App';
importrouterfrom'./router';
importstorefrom'./store';
// 引入国际化插件importVueI18nfrom'vue-i18n';
// 引入统一配置importcommonfrom'./lib/common';
// 引入animate.cssimportanimatedfrom'animate.css';
Vue.use(animated);
Vue.use(VueI18n); // 通过插件的形式挂载Vue.use(common); // 全局配置项/* eslint-disable no-new */// 把vue实例挂载在window.vm,方便使用vue的实例window.vm=newVue({
el: '#app',
router,
store,
components: {
App,
  },
template: '<App/>',
});


vue3.x使用app.use()

import { createApp } from'vue';
importAppfrom'./App.vue';
importrouterfrom'./router';
importstorefrom'./store';
importvantfrom'vant';
import'vant/lib/index.css';
importglobalFunctionfrom'./utils/globalFunction'; // 引入全局方法constapp=createApp(App);
app.use(vant);
app.use(store);
app.use(router);
// 挂载全局方法for (constkeyinglobalFunction) {
app.provide(key, globalFunction[key]);
console.log(key);
}
app.mount('#app');
window.vm=app;

先看一下官方给的文档说明:


通过Vue.use安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法,install 方法调用时,会将 Vue 作为参数传入。


需要注意的是:通过Vue.use安装 Vue.js 插件,如果插件是一个对象,那么对象当Vue.use(插件)之后,插件的install方法会立即执行;如果插件是一个函数,当Vue.use(插件)之后,函数会被立即执行


也就是说:


Vue.use参数为函数(插件为函数)时,函数的参数是Vue对象

Vue.use参数为对象(插件为对象)时,它提供的install方法中参数是Vue对象

所以可以进行以下尝试(以vue2.x的使用为例,3.x写法与2.x类似):


首先是 Vue.use参数为对象(插件为对象)时

自定义一个demo文件:

constdemo= {
// 参数为对象时,需要提供install方法install: (Vue) => {
console.log('自定义插件', Vue);
// 定义一些vue中常用的全局方法Vue.prototype.$Toast= () => { console.log('全局toast提示') }; // toast提示,通过this.$Toast调用Vue.prototype.$request= () => { console.log('全局request请求') }; // request请求,通过this.$request调用    }
}
exportdefaultdemo;

main.js中通过Vue.use安装自定义的demo插件:

importVuefrom'vue';
importAppfrom'./App';
importrouterfrom'./router';
importstorefrom'./store';
importdemofrom'./lib/demo';
Vue.use(demo); // 安装自定义插件/* eslint-disable no-new */// 把vue实例挂载在window.vm,方便使用vue的实例window.vm=newVue({
el: '#app',
router,
store,
components: {
App,
  },
template: '<App/>',
});

接下来是 Vue.use参数为函数(插件为函数)时

自定义一个common文件:

constcommon= (Vue) => {
console.log('自定义插件', Vue);
// 定义一些vue中常用的全局方法Vue.prototype.$Toast= () => { console.log('全局toast提示') }; // toast提示,通过this.$Toast调用Vue.prototype.$request= () => { console.log('全局request请求') }; // request请求,通过this.$request调用};
exportdefaultcommon;

main.js中通过Vue.use安装自定义的common插件:

importVuefrom'vue';
importAppfrom'./App';
importrouterfrom'./router';
importstorefrom'./store';
importcommonfrom'./lib/common';
Vue.use(common); // 安装自定义插件/* eslint-disable no-new */// 把vue实例挂载在window.vm,方便使用vue的实例window.vm=newVue({
el: '#app',
router,
store,
components: {
App,
  },
template: '<App/>',
});

插件除了默认的参数 Vue 以外,还可以按需要传入自定义参数,如(两种方式都可以,这里拿参数为对象形式举例)

自定义一个demo文件:

constdemo= {
// 参数为对象时,需要提供install方法install: (Vue, a, b, c) => {
console.log('自定义插件', Vue, a, b, c);
// 定义一些vue中常用的全局方法Vue.prototype.$Toast= () => { console.log('全局toast提示') }; // toast提示,通过this.$Toast调用Vue.prototype.$request= () => { console.log('全局request请求') }; // request请求,通过this.$request调用    }
}
exportdefaultdemo;

main.js中通过Vue.use安装自定义的demo插件:

importVuefrom'vue';
importAppfrom'./App';
importrouterfrom'./router';
importstorefrom'./store';
importdemofrom'./lib/demo';
Vue.use(demo, 1, 2, {name:'小明'}); // 安装自定义插件/* eslint-disable no-new */// 把vue实例挂载在window.vm,方便使用vue的实例window.vm=newVue({
el: '#app',
router,
store,
components: {
App,
  },
template: '<App/>',
});

Vue.use源码

import { toArray } from'../util/index'// Vue.use 源码exportfunctioninitUse (Vue: GlobalAPI) {
// 首先先判断插件plugin是否是对象或者函数:Vue.use=function (plugin: Function|Object) {
constinstalledPlugins= (this._installedPlugins|| (this._installedPlugins= []))
// 判断vue是否已经注册过这个插件,如果已经注册过,跳出方法if (installedPlugins.indexOf(plugin) >-1) {
returnthis    }
// 取vue.use参数,toArray() 方法代码在下一个代码块constargs=toArray(arguments, 1)
args.unshift(this)
// 判断插件是否有install方法,如果有就执行install()方法。没有就直接把plugin当Install执行。if (typeofplugin.install==='function') {
plugin.install.apply(plugin, args)
    } elseif (typeofplugin==='function') {
plugin.apply(null, args)
    }
installedPlugins.push(plugin)
returnthis  }
}
// toArray 方法源码exportfunctiontoArray (list: any, start?: number): Array<any> {
start=start||0leti=list.length-startconstret: Array<any>=newArray(i)
while (i--) {
ret[i] =list[i+start]
  }
returnret}

文章参考:https://blog.csdn.net/weixin_43788115/article/details/103384064?spm=1001.2014.3001.5506

目录
相关文章
|
4月前
|
JavaScript 算法 编译器
vue3 原理 实现方案
【8月更文挑战第15天】vue3 原理 实现方案
46 1
|
25天前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
27 1
|
28天前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
1月前
|
JavaScript
Vue 双向数据绑定原理
Vue的双向数据绑定通过其核心的响应式系统实现,主要由Observer、Compiler和Watcher三个部分组成。Observer负责观察数据对象的所有属性,将其转换为getter和setter;Compiler解析模板指令,初始化视图并订阅数据变化;Watcher作为连接Observer和Compiler的桥梁,当数据变化时触发相应的更新操作。这种机制确保了数据模型与视图之间的自动同步。
|
1月前
|
缓存 JavaScript 搜索推荐
Vue SSR(服务端渲染)预渲染的工作原理
【10月更文挑战第23天】Vue SSR 预渲染通过一系列复杂的步骤和机制,实现了在服务器端生成静态 HTML 页面的目标。它为提升 Vue 应用的性能、SEO 效果以及用户体验提供了有力的支持。随着技术的不断发展,Vue SSR 预渲染技术也将不断完善和创新,以适应不断变化的互联网环境和用户需求。
74 9
|
25天前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
54 0
|
3月前
|
缓存 JavaScript 前端开发
「offer来了」从基础到进阶原理,从vue2到vue3,48个知识点保姆级带你巩固vuejs知识体系
该文章全面覆盖了Vue.js从基础知识到进阶原理的48个核心知识点,包括Vue CLI项目结构、组件生命周期、响应式原理、Composition API的使用等内容,并针对Vue 2与Vue 3的不同特性进行了详细对比与讲解。
「offer来了」从基础到进阶原理,从vue2到vue3,48个知识点保姆级带你巩固vuejs知识体系
|
2月前
|
JavaScript UED
Vue双向数据绑定的原理
【10月更文挑战第7天】
|
2月前
|
JavaScript 前端开发 API
vue3知识点:Vue3.0中的响应式原理和 vue2.x的响应式
vue3知识点:Vue3.0中的响应式原理和 vue2.x的响应式
29 0
|
3月前
vue2的响应式原理学“废”了吗?继续观摩vue3响应式原理Proxy
该文章对比了Vue2与Vue3在响应式原理上的不同,重点介绍了Vue3如何利用Proxy替代Object.defineProperty来实现更高效的数据响应机制,并探讨了这种方式带来的优势与挑战。
vue2的响应式原理学“废”了吗?继续观摩vue3响应式原理Proxy