欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析Vue.use()是干什么的

 更新時(shí)間:2022年06月08日 14:33:04   作者:lazy_tomato  
今天通過(guò)本文給大家分享Vue.use是什么,主要包括vueEsign?插件的install是什么,element-ui的install是什么,為什么有的庫(kù)就不需要使用Vue.use,對(duì)vue.use()相關(guān)知識(shí)感興趣的朋友一起看看吧

start

  • 前幾天使用了一個(gè)別人封裝的電子簽名組件:vueEsign。
  • 在初始化的時(shí)候有這么一行代碼:Vue.use(vueEsign)
  • 之前使用element-ui,也需要使用Vue.use()
  • 這行代碼到底是什么?學(xué)習(xí)一下。

本文所有演示內(nèi)容,vue.js版本為2.6.14

1. Vue.use是什么,了解一下!?

1.1 main.js中的Vue.use()

import Vue from 'vue'
import App from './App.vue'
import router from './router'


import vueEsign from 'vue-esign'
Vue.use(vueEsign)

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

1.2 簡(jiǎn)單解釋一下這里的import的邏輯,

  • 如果from后面是路徑,直接沿路徑去尋找對(duì)應(yīng)文件。
  • 如果from后面是一個(gè)名稱,那就引入是第三方模塊,會(huì)去node_modules中尋找對(duì)應(yīng)名稱的文件夾。

node_modulespackage.jsonmain屬性

1.3 Vue.use()代碼

找到對(duì)應(yīng)文件

對(duì)應(yīng)代碼

  function initUse (Vue) {

  // 1. Vue.use是一個(gè)函數(shù)
  Vue.use = function (plugin) {

    // 2. 定義一個(gè)數(shù)組 如果this._installedPlugin不存在,會(huì)執(zhí)行`this._installedPlugins = []
    var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));

    // 3. 判斷是否已經(jīng)注冊(cè)了,已經(jīng)注冊(cè)了直接return
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }
    
    
    // 4.獲取其他參數(shù)  例如: Vue.use(plugin,a,b,c) 中的 a b c
    var args = toArray(arguments, 1);

    // 5.參數(shù)第一項(xiàng),加一個(gè)Vue實(shí)例進(jìn)去
    args.unshift(this);

    // 6. plugin 有 install 這個(gè)方法
    if (typeof plugin.install === 'function') {
      // 7. 執(zhí)行一下install,再把參數(shù)傳遞進(jìn)去  (可以看插件的install方法,接受第一個(gè)參數(shù),就是Vue實(shí)例)
      plugin.install.apply(plugin, args);
    } else if (typeof plugin === 'function') {
      // 8. 如果plugin 本身就是函數(shù) 直接執(zhí)行
      plugin.apply(null, args);
    }

    // 9. 來(lái)一個(gè)數(shù)組存儲(chǔ)已經(jīng)注冊(cè)的插件
    installedPlugins.push(plugin);
    
    return this
  };
}

2. 看一下 vueEsign 插件的install是什么?

node_modules\vue-esign\src\idnex.js
// 1. 引入一個(gè)vue組件,實(shí)際上就是一個(gè)對(duì)象
import vueEsign from './index.vue'

// 2.對(duì)象install屬性是一個(gè)方法,它接受一個(gè)參數(shù) Vue
vueEsign.install = function (Vue) {

  // 3. 判斷是否已經(jīng)安裝了這個(gè)插件(這里this指向?yàn)関ueEsign,在Vue.use中用apply改寫(xiě)的)
  if (this.installed) {
    return
  }
  this.installed = true

  // 4. 在Vue上注冊(cè)一下組件
  Vue.component('vueEsign', vueEsign)
}
export default vueEsign

3.看一下 element-ui的install是什么?

node_modules\element-ui\src\index.js
// 1. 它也是一個(gè)函數(shù)
const install = function(Vue, opts = {}) {
  // 2.讀取了部分其他本地化配置
  locale.use(opts.locale);
  locale.i18n(opts.i18n);

  // 3.components就是element-ui的組件組成的數(shù)組,遍歷一下,在Vue上注冊(cè)了這些組件。  
  // (!!可以發(fā)現(xiàn)這里和另一個(gè)插件有相同點(diǎn),都是在install的第一個(gè)參數(shù)Vue上注冊(cè)組件,)
  components.forEach(component => {
    Vue.component(component.name, component);
  });
  
  // 4. 這里的 Vue.use 原理是一樣的(可以對(duì)照截圖,它這里后續(xù)是在Vue上注冊(cè)了指令)
  Vue.use(InfiniteScroll);
  Vue.use(Loading.directive);

  // 5.下面都是在Vue原型上掛載屬性或方法
  Vue.prototype.$ELEMENT = {
    size: opts.size || '',
    zIndex: opts.zIndex || 2000
  };

  Vue.prototype.$loading = Loading.service;
  Vue.prototype.$msgbox = MessageBox;
  Vue.prototype.$alert = MessageBox.alert;
  Vue.prototype.$confirm = MessageBox.confirm;
  Vue.prototype.$prompt = MessageBox.prompt;
  Vue.prototype.$notify = Notification;
  Vue.prototype.$message = Message;

};

4. Vue.use() 總結(jié)

  1. 首先 Vue.use 本身是一個(gè)函數(shù);
  2. Vue.use這個(gè)函數(shù)做了這些操作:
  • 判斷插件是否注冊(cè);
  • 如果插件自帶insatll屬性,執(zhí)行它,同時(shí)傳遞一個(gè)Vue構(gòu)造函數(shù)作為第一個(gè)參數(shù),以及use中的其他參數(shù);
  • 如果插件本身就是函數(shù),執(zhí)行它,同時(shí)傳遞一個(gè)Vue構(gòu)造函數(shù)作為第一個(gè)參數(shù),以及use中的其他參數(shù)
  • 記錄這個(gè)插件已經(jīng)注冊(cè);

3.暫時(shí)遇到的插件本身都是一個(gè)對(duì)象,然后install中都會(huì)拿到傳遞來(lái)的Vue構(gòu)造函數(shù)進(jìn)行一些綁定操作。例如綁定組件,例如在原型上添加方法。

5.為什么有的庫(kù)就不需要使用Vue.use

例如常見(jiàn)的aixos引入

import axios from 'axios'
Vue.prototype.$axios=axios

axios本身是不依賴Vue去運(yùn)行的,axios本身就可以在瀏覽器端或者node端都能進(jìn)行http請(qǐng)求。

這里掛載到Vue原型的$axios屬性上,只是為了方便使用。

end

  • 感覺(jué)就是 組件 需要和 Vue構(gòu)造函數(shù) 進(jìn)行交互的時(shí)候,才需要Vue.use()。
  • 本質(zhì)就是傳遞一個(gè) Vue構(gòu)造函數(shù) 給插件使用,僅此而已。

到此這篇關(guān)于Vue.use()是干什么的的文章就介紹到這了,更多相關(guān)Vue.use()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue路由實(shí)現(xiàn)登錄攔截

    vue路由實(shí)現(xiàn)登錄攔截

    這篇文章主要介紹了vue路由如何實(shí)現(xiàn)登錄攔截,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • 使用Vue實(shí)現(xiàn)移動(dòng)端左滑刪除效果附源碼

    使用Vue實(shí)現(xiàn)移動(dòng)端左滑刪除效果附源碼

    這篇文章主要介紹了使用Vue實(shí)現(xiàn)移動(dòng)端左滑刪除效果,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • 詳解vue 在移動(dòng)端體驗(yàn)上的優(yōu)化解決方案

    詳解vue 在移動(dòng)端體驗(yàn)上的優(yōu)化解決方案

    這篇文章主要介紹了vue 在移動(dòng)端體驗(yàn)上的優(yōu)化解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue+webpack實(shí)現(xiàn)異步加載三種用法示例詳解

    vue+webpack實(shí)現(xiàn)異步加載三種用法示例詳解

    這篇文章主要介紹了vue+webpack實(shí)現(xiàn)異步加載的三種用法,文中給大家提到了vue+webpack實(shí)現(xiàn)異步組件加載的代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-04-04
  • vue根據(jù)條件不同顯示不同按鈕的操作

    vue根據(jù)條件不同顯示不同按鈕的操作

    這篇文章主要介紹了vue根據(jù)條件不同顯示不同按鈕的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Vue中代碼傳送(teleport)的實(shí)現(xiàn)

    Vue中代碼傳送(teleport)的實(shí)現(xiàn)

    本文主要介紹了Vue中代碼傳送(teleport)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • vue實(shí)現(xiàn)文件上傳功能

    vue實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 解決vue打包后vendor.js文件過(guò)大問(wèn)題

    解決vue打包后vendor.js文件過(guò)大問(wèn)題

    這篇文章主要介紹了解決vue打包后vendor.js文件過(guò)大問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • vue使用cesium創(chuàng)建數(shù)據(jù)白模方式

    vue使用cesium創(chuàng)建數(shù)據(jù)白模方式

    這篇文章主要介紹了vue使用cesium創(chuàng)建數(shù)據(jù)白模方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue動(dòng)態(tài)設(shè)置img的src路徑實(shí)例

    vue動(dòng)態(tài)設(shè)置img的src路徑實(shí)例

    今天小編就為大家分享一篇vue動(dòng)態(tài)設(shè)置img的src路徑實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論