美文网首页
【vue学习】Vue.use

【vue学习】Vue.use

作者: 前端菜篮子 | 来源:发表于2019-12-26 11:03 被阅读0次

一、源码分析

vue插件时,我们会引入插件后,调用下Vue.use(),如:

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

为啥要执行下Vue.use()呢?我们来看下Vue.use源码

image.png

我们来看下vuexindex.d.ts,导出组件时的写法:

image.png

二、用法介绍

vue.use(plugin, arguments) ,参数:plugin(Function | Object)

说明:

  • vue安装的组件类型必须为Function或者是Object
  • 若是Object,必须提供install方法
  • 若是Function,会被直接当作install函数执行
  • install函数接受参数,默认第一个参数为Vue,其后参数为注册组件时传入的arguments

所以我们自己的插件封装方式一般都为Object,提供install方法,案例elementui2如下:

import Cascader from './components/form/src/Cascader'
import Checkbox from './components/form/src/Checkbox'
import ColorPicker from './components/form/src/ColorPicker'
const components = {
    Cascader,
    Checkbox,
    ColorPicker,
}

const install = function(Vue) {
    Object.keys(components).forEach(key => {
        Vue.component(key, components[key])
    })
};

/* 支持使用标签的方式引入 */
if (typeof window !== 'undefined' && window.Vue) {
    install(window.Vue);
}

Object.assign(components, {
    version: '1.0.1',
    install
})
export default components

三、如上插件不调用use可以吗

也是可以的。我们还是以上述elementui2为例:

我们用Vue.use(elementui2)的时候,用的是对象中的install;全局引入install函数中注册过的组件;

  • A. 若不需全局引入,具体某个页面需要用,且只需要引用其中某个或某几个组件,不需要 use,用import 即可:
import  { Cascader,Checkbox } from elementui2
components: { Cascader,Checkbox }
  • B. 全局引入后,不用use可不可以呢?也可以啊,就是麻烦点呗,具体页面components配置项配置下即可。
  //我打包的时候,package.json中配置的name是eui
  //main.js中全局引入
  import  eui from elementui2

  //具体页面调用
 let cmpts = { } //这里写页面单独引入的一些组件
 //全部引入也可以: Object.assign(cmpts, eui2)
 Object.assign(cmpts, {Cascader:  eui.Cascader })  
 components: cmpts

四、没有install 函数的 js

jqueryaxiosjs-cookie等等,很多库,都没有install函数,引入调用也不需要Vue.use,来看下axios的源码:

image.png

在需要的地方引入该js库,调用对应的方法即可。

这种并非专门给vue写的,更非组件,如axios只是一个同时支持支持node端和浏览器端的http库。

相关文章

网友评论

      本文标题:【vue学习】Vue.use

      本文链接:https://www.haomeiwen.com/subject/ntrkoctx.html