vue学习(一) - vue.use

266 阅读1分钟

新公司主要技术栈是vue,虽然自己这些年主要还是在react-native方面深耕的更多,但是即来则安,开始多做些学习分享吧

开始做vue项目,一开始就会遇到vue.use()这个方法,这个到底是啥原理呢,直接看源码

function initUse (Vue) {
    Vue.use = function (plugin) {
      var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
      if (installedPlugins.indexOf(plugin) > -1) {
        return this
      }

      // additional parameters
      var args = toArray(arguments, 1);
      args.unshift(this);
      if (typeof plugin.install === 'function') {
        plugin.install.apply(plugin, args);
      } else if (typeof plugin === 'function') {
        plugin.apply(null, args);
      }
      installedPlugins.push(plugin);
      return this
    };
  }

可以看出这个很简单,vue.use(plugin)传入的参数有一个特征,带有install方法,在vue.use()中会去调用install,实现插件的注入。同时use会自动阻止多次注册相同插件,届时即使多次调用也只会注册一次该插件。

vue.js 官方提供的一些插件 (例如 vue-router) 在检测到 Vue 是可访问的全局变量时会自动调用 Vue.use()。然而在像 CommonJS 这样的模块环境中,你应该始终显式地调用 Vue.use()

也有的插件没有install,比如axios就无法使用vue.use(),至于为啥没有,得问作者了。