本文主要給大家介紹的是關于在Vue框架中正確引入JS庫的相關內容,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:
錯誤示范
全局變量法
最不靠譜的方式就是將導入的庫掛在全部變量window 對象下:
// entry.js:window._ = require('lodash');// MyComponent.vue:export default { created() { console.log(_.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..'); }}這種方式的缺點有很多,我們只說其中一個關鍵的點:不支持服務端渲染。當應用跑在服務端時,window對象不存在,當然試圖去訪問window下的屬性會拋出錯誤。
處處引入法
另外一個不太優雅的方式就是在需要的每個文件中都引入對應的庫:
// MyComponent.vue:import _ from 'lodash';export default { created() { console.log(_.isEmpty() ? 'Lodash is available here!' : 'Uh oh..'); }}雖然這方法是可行的,但是太不簡潔。你必須在每個文件中都記得引入, 而且如果不需要了,又得重新刪除。另外,如果打包策略不夠明智的話,可能會打包出多份重復的代碼。
正確引入方式
最簡單靠譜的方式是用庫變成Vue的原型對象的屬性。下面,我來演示如何將Moment 庫引入:
import moment from 'moment';Object.definePrototype(Vue.prototype, '$moment', { value: moment });Object.definePrototype 語法參見 MDN
由于所有的組件都會繼承Vue原型對象上的方法,因此這些方法在任何組件文件中都能通過this.$moment 訪問到:
// MyNewComponent.vueexport default { created() { console.log('The time is ' . this.$moment().format("HH:mm")); }}使用 Object.defineProperty 定義對象屬性,如果不在屬性描述器中額外說明,則該屬性就是默認只讀的,保護引入的庫不被重新賦值。
寫成插件
如果你在項目的很多地方都用了某個庫,或者你希望全局可用,你可以構建自己的Vue 插件。
插件能化繁為簡,能讓你像下面這樣很簡單地引入自己想要的庫:
import MyLibraryPlugin from 'my-library-plugin';Vue.use(MyLibraryPlugin);
就像Vue Route,Vuex等插件一樣,我們的庫僅僅需要兩行,就能在任何地方使用了。
如何寫插件
首先,創建一個文件。本例中,我將引入一個Axios庫的插件。我們就把這個文件命名為axios.js 吧。
最關鍵的地方在于,我們需要暴露一個將Vue構造器作為第一個參數的install 方法。
// axios.js:export default { install: function(Vue) { // Do stuff }}然后我們可以用之前的方式將庫添加到Vue的原型對象上:
新聞熱點
疑難解答
圖片精選