首頁 web前端 Vue.js 淺談Vue.use到底是什麼?

淺談Vue.use到底是什麼?

Oct 26, 2020 pm 05:50 PM
vue.js

淺談Vue.use到底是什麼?

Vue.use到底是什麼鬼、下面這篇文章就來跟大家介紹一下Vue.use。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

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

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

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

    ##新增全域方法或屬性。如:
  1. vue-custom-element
  2. 新增全域資源:指令/過濾器/過渡/元件等。如
  3. vue-touch
  4. 透過全域混入來新增一些元件選項。如
  5. vue-router
  6. 新增
  7. Vue 實例方法,透過將它們加入 Vue.prototype 上實作。
  8. 一個函式庫,提供自己的 API,同時提供上述的一個或多個功能。如
  9. 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其實並不神秘,內部還是我們平常使用的這些東西,僅僅只是給他們套上了一層高端的外衣而已。我們在開發中,也可以嘗試使用這種方式,不僅簡單,而且有逼格。

    相關推薦:


    2020年前端vue面試題大匯總(附答案)

    vue教程推薦:2020最新的5個vue.js影片教學精選

    更多程式相關知識,請造訪:

    程式設計入門! !

    以上是淺談Vue.use到底是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
深入探討vite是怎麼解析.env檔的 深入探討vite是怎麼解析.env檔的 Jan 24, 2023 am 05:30 AM

使用vue框架開發前端專案時,我們部署的時候都會部署多套環境,往往開發、測試以及線上環境呼叫的介面網域都是不一樣的。如何能做到區分呢?那就是使用環境變數和模式。

圖文詳解如何在Vue專案中整合Ace程式碼編輯器 圖文詳解如何在Vue專案中整合Ace程式碼編輯器 Apr 24, 2023 am 10:52 AM

Ace 是一個用 JavaScript 寫的可嵌入程式碼編輯器。它與 Sublime、Vim 和 TextMate 等原生編輯器的功能和效能相符。它可以很容易地嵌入到任何網頁和 JavaScript 應用程式中。 Ace 被維護為Cloud9 IDE的主要編輯器 ,並且是 Mozilla Skywriter (Bespin) 專案的繼承者。

vue中組件化和模組化有什麼區別 vue中組件化和模組化有什麼區別 Dec 15, 2022 pm 12:54 PM

組件化和模組化的區別:模組化是從程式碼邏輯的角度進行劃分的;方便程式碼分層開發,確保每個每個功能模組的職能一致。元件化是從UI介面的角度進行規劃;前端的元件化,方便UI元件的重複使用。

探討如何在Vue3中撰寫單元測試 探討如何在Vue3中撰寫單元測試 Apr 25, 2023 pm 07:41 PM

在當今前端開發中,Vue.js 已經成為了一個非常流行的框架。隨著 Vue.js 的不斷發展,單元測試變得越來越重要。今天,我們將探討如何在 Vue.js 3 中編寫單元測試,並提供一些最佳實踐和常見的問題及解決方案。

聊聊vue3怎麼使用高德地圖api 聊聊vue3怎麼使用高德地圖api Mar 09, 2023 pm 07:22 PM

在我們使用高德地圖的時候,官方給我們推薦了很多案例,demo,但是這些案例都是使用原生方法接入,並沒有提供vue或者react 的demo,vue2的接入網上也很多人都有寫過,以下這篇文章就來看看vue3怎麼使用常用的高德地圖api,希望對大家有幫助!

怎麼查詢目前vue的版本 怎麼查詢目前vue的版本 Dec 19, 2022 pm 04:55 PM

查詢目前vue版本的兩種方法:1、在cmd控制台內,執行「npm list vue」指令查詢版本,輸出結果就是vue的版本號資訊;2、在專案中找到並開啟package.json文件,查找「dependencies」項目即可看到vue的版本資訊。

Vue中JSX語法和模板語法的簡單比較(優劣勢分析) Vue中JSX語法和模板語法的簡單比較(優劣勢分析) Mar 23, 2023 pm 07:53 PM

在Vue.js中,開發人員可以使用兩種不同的語法來建立使用者介面:JSX語法和範本語法。這兩種文法各有優劣,以下就來探討它們的差異和優劣勢。

淺析vue怎麼實現檔案切片上傳 淺析vue怎麼實現檔案切片上傳 Mar 24, 2023 pm 07:40 PM

在實際開發專案過程中有時候需要上傳比較大的文件,然後呢,上傳的時候相對來說就會慢一些,so,後台可能會要求前端進行文件切片上傳,很簡單哈,就是把比如說1個G的檔案流切割成若干個小的檔案流,然後分別請求介面傳遞這個小的檔案流。

See all articles