首先在注册全局API或者全局组件的时候,需要在注册install方法(当然也可以不注册),接下来我们看一下为什么要使用这个方法, 接下来跟着我一起看一下Vue.use的源码
// 首先我们注册一下方法或者组件
import table from "./src/index.vue";
table.install = function(Vue) { // 在这里注册了install方法
Vue.component(table.name, table );
};
export default table;
// 然后需要在main.js里面注册table组件
import table from "@/src/index.vue";
import Vue from "vue";
Vue.use(table) // 是不是都是这样引入的,那接下来我们看一下use的内部构造
import { toArray } from '../util/index'
export function initUse (Vue: GlobalAPI) {
Vue.use = function (plugin: Function | Object) {
const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
if (installedPlugins.indexOf(plugin) > -1) {
return this
}
// additional parameters
const args = toArray(arguments, 1)
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)
return this
}
}
// 这是use用到的一个方法
export function toArray (list: any, start?: number): Array<any> {
start = start || 0
let i = list.length - start
const ret: Array<any> = new Array(i)
while (i--) {
ret[i] = list[i + start]
}
return ret
}
明白了吗,installedPlugins 里面包含了use所有的引入,那我们消化一下,总结一下use方法的使用流程
首先在Vue实例生成的过程中,将会遍历Vue.use上挂载的所有组件或者包或者函数,然后将挂载的东西按顺序放到 installedPlugins 数组里面,所以 Vue生成的时候是靠 installedPlugins 数组进行的xx挂载