91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue.use指的是什么

發布時間:2021-01-27 12:48:15 來源:億速云 閱讀:134 作者:小新 欄目:編程語言

小編給大家分享一下Vue.use指的是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

我們在使用Vue做項目開發的時候,看到不少輪子都是通過Vue.use來進行使用,感覺甚是高大上。

不過Vue.use到底是什么鬼?不妨來看個究竟。

其實這些輪子都可以稱之為插件,它的功能范圍沒有嚴格的限制,一般包含如下幾種:

  1. 添加全局方法或者屬性。如: vue-custom-element

  2. 添加全局資源:指令/過濾器/過渡/組件等。如 vue-touch

  3. 通過全局混入來添加一些組件選項。如 vue-router

  4. 添加 Vue 實例方法,通過把它們添加到 Vue.prototype 上實現。

  5. 一個庫,提供自己的 API,同時提供上面提到的一個或多個功能。如 vue-router

無論大小,插件要實現的功能無非就是上述這幾種。但是,這并不妨礙我們創造出復雜的插件,不過我們還是希望給用戶提供一個簡單的使用方法,他不需要關注插件內部做了些什么。固Vue提供了use方法,專門來在new Vue()之前使用插件。

不管是官方提供的插件(例如vue-routervuex),還是第三方的插件(例如ElementUIant)都是采用了此方式,不外乎插件內部的功能不同而已。當然,還有其他諸多此類插件,awesome-vue 就集合了大量由社區貢獻的插件和庫。

接下來,我們就來看下這個神秘的use方法是如何實現的。

Vue.js 的插件應該暴露一個 install 方法。這個方法的第一個參數是 Vue 構造器,第二個參數是一個可選的選項對象,用于傳入插件的配置:

MyPlugin.install = function (Vue, options) {
  // 1. 添加全局方法或屬性
  Vue.myGlobalMethod = function () {
    // 邏輯...
  }
  // 2. 添加全局資源
  Vue.directive('my-directive', {
    bind (el, binding, vnode, oldVnode) {
      // 邏輯...
    }
    ...
  })
  // 3. 注入組件選項
  Vue.mixin({
    created: function () {
      // 邏輯...
    }
    ...
  })
  // 4. 添加實例方法
  Vue.prototype.$myMethod = function (methodOptions) {
    // 邏輯...
  }
  // 5. 注冊全局組件
  Vue.component('myButton',{
    // ...組件選項
  })
}
Vue.use(MyPlugin,{
  // ...options
})

一個插件內部大概就是如上所示,其實也不外乎上述那幾種東西,甚是簡單。接下來我們就來看下真實的案例ElementUI:

const components = [ Pagination, Dialog, Autocomplete/* 此處由于篇幅省略若干個組件 */];
const install = function(Vue, opts = {}) {
  locale.use(opts.locale);
  locale.i18n(opts.i18n);
  // 注冊全局組件
  components.forEach(component => {
    Vue.component(component.name, component);
  });
  Vue.use(InfiniteScroll);
  Vue.use(Loading.directive);
  // 添加實例方法
  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;
};
/* istanbul ignore if */
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue);
}
export default {
  version: '2.13.0',
  locale: locale.use,
  i18n: locale.i18n,
  install,
  CollapseTransition,
  Loading,
  Pagination,
  Dialog,
  Autocomplete,
  // ...other components
};

我們不難發現,其實自己來實現一個插件也是超級簡單,只要對外暴露一個install方法即可,在使用Vue.use的時候,會調用這個方法。所以我們只要將要實現的內容放到install內部即可。這樣的好處就是插件需要一開始調用的方法都封裝在install里面,更加精簡和可拓展性更高。

大家可能也有注意到,這里的install其實是將所有的組件全部引入了。作為一個龐大的插件庫,這樣可能會有一些性能問題。用過的ElementUI的同學都知道,它是支持按需引入的,其實在上面的示例中也可以發現一些蛛絲馬跡。

const components = [ Pagination, Dialog, Autocomplete/* 此處由于篇幅省略若干個組件 */];
// ....省去中間內容
export default {
  version: '2.13.0',
  locale: locale.use,
  i18n: locale.i18n,
  install,
  CollapseTransition,
  Loading,
  Pagination,
  Dialog,
  Autocomplete,
  // ...other components
};

這里將每個組件都單獨都導出了,而在每個組件內部,也類似的暴露了install來組件每個組件,這樣就可以單獨Vue.use每個組件,從而實現按需引入的目的。

import Alert from './src/main';
/* istanbul ignore next */
Alert.install = function(Vue) {
  Vue.component(Alert.name, Alert);
};
export default Alert;

除了上述內容之外,還有幾點值得我們注意一下:

  • 插件傳入的如果是一個對象,則執行其install方法,如果是一個函數,則執行它自身,并bind thisnull,然后傳入額外的參數

if (typeof plugin.install === 'function') {
  plugin.install.apply(plugin, args);
} else if (typeof plugin === 'function') {
  plugin.apply(null, args);
}
  • 如果插件沒有被注冊過,那么注冊成功之后會給插件添加一個installed的屬性,其值為trueVue.use方法內部會檢測插件的installed屬性,從而避免重復注冊插件

Vue.use其實并不神秘,內部還是我們平時使用的這些東西,僅僅只是給他們套上了一層高端的外衣而已。我們在開發中,也可以嘗試使用這種方式,不僅簡單,而且有逼格。

以上是“Vue.use指的是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰宁县| 枞阳县| 舟曲县| 定远县| 镇宁| 洛阳市| 远安县| 湛江市| 沂南县| 苗栗县| 安顺市| 大丰市| 安康市| 西乌珠穆沁旗| 贡嘎县| 舞钢市| 河南省| 灵寿县| 巴彦县| 望江县| 安福县| 叶城县| 津南区| 无极县| 禄劝| 昌都县| 江油市| 滨州市| 高唐县| 当涂县| 娱乐| 武胜县| 德州市| 河东区| 旬邑县| 漳州市| 千阳县| 南安市| 富顺县| 许昌县| 将乐县|