国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue框架中正確引入JS庫的方法介紹

2019-11-19 15:56:58
字體:
供稿:網(wǎng)友

本文主要給大家介紹的是關(guān)于在Vue框架中正確引入JS庫的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說,來一起看看詳細(xì)的介紹:

錯誤示范

全局變量法

最不靠譜的方式就是將導(dǎo)入的庫掛在全部變量window 對象下:

// entry.js:window._ = require('lodash');// MyComponent.vue:export default { created() { console.log(_.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..'); }}

這種方式的缺點有很多,我們只說其中一個關(guān)鍵的點:不支持服務(wù)端渲染。當(dāng)應(yīng)用跑在服務(wù)端時,window對象不存在,當(dāng)然試圖去訪問window下的屬性會拋出錯誤。

處處引入法

另外一個不太優(yōu)雅的方式就是在需要的每個文件中都引入對應(yīng)的庫:

// MyComponent.vue:import _ from 'lodash';export default { created() { console.log(_.isEmpty() ? 'Lodash is available here!' : 'Uh oh..'); }}

雖然這方法是可行的,但是太不簡潔。你必須在每個文件中都記得引入, 而且如果不需要了,又得重新刪除。另外,如果打包策略不夠明智的話,可能會打包出多份重復(fù)的代碼。

正確引入方式

最簡單靠譜的方式是用庫變成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 定義對象屬性,如果不在屬性描述器中額外說明,則該屬性就是默認(rèn)只讀的,保護(hù)引入的庫不被重新賦值。

寫成插件

如果你在項目的很多地方都用了某個庫,或者你希望全局可用,你可以構(gòu)建自己的Vue 插件。

插件能化繁為簡,能讓你像下面這樣很簡單地引入自己想要的庫:

import MyLibraryPlugin from 'my-library-plugin';Vue.use(MyLibraryPlugin);

就像Vue Route,Vuex等插件一樣,我們的庫僅僅需要兩行,就能在任何地方使用了。

如何寫插件

首先,創(chuàng)建一個文件。本例中,我將引入一個Axios庫的插件。我們就把這個文件命名為axios.js 吧。

最關(guān)鍵的地方在于,我們需要暴露一個將Vue構(gòu)造器作為第一個參數(shù)的install 方法。

// axios.js:export default { install: function(Vue) { // Do stuff }}

然后我們可以用之前的方式將庫添加到Vue的原型對象上:

// axios.jsimport axios from 'axios';export default { install: function(Vue) { Object.defineProperty(Vue.prototype, '$http', { value: axios }); }}

接著我們只需要Vue實例的use方法就能將這個庫引入整個項目了。我們像下面代碼一樣簡單引入:

// entry.jsimport AxiosPlugin from './axios.js';Vue.use(AxiosPlugin);new Vue({ created() { console.log(this.$http ? 'Axios works!' : 'Uh oh..'); }})

插件參數(shù)設(shè)置

插件的install方法還可以接受其他的可選參數(shù)。有些開發(fā)者可能不喜歡Axios實例對象的方法名$http,因為Vue resource插件的方法名也是這個。然后,讓我們利用第二個參數(shù)來修改它。

// axios.jsimport axios from 'axios';export default { install: function(Vue, name = '$http') { Object.defineProperty(Vue.prototype, name, { value: axios }); }}
// entry.jsimport AxiosPlugin from './axios.js';Vue.use(AxiosPlugin, '$axios');new Vue({ created() { console.log(this.$axios ? 'Axios works!' : 'Uh oh..'); }})

當(dāng)然上面,我們可以直接在Object.defineProperty的中將name屬性寫死成$axios。也可以在install方法中引入多個需要的庫。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天等县| 河曲县| 商城县| 梨树县| 琼海市| 莱州市| 托克托县| 泸水县| 天柱县| 会同县| 旺苍县| 三明市| 民勤县| 安图县| 聊城市| 丹凤县| 府谷县| 青铜峡市| 湟中县| 泰兴市| 克山县| 抚顺县| 清涧县| 阿尔山市| 萍乡市| 大兴区| 安义县| 邛崃市| 垫江县| 濉溪县| 景洪市| 龙游县| 晋州市| 九龙城区| 阳信县| 金阳县| 云龙县| 新丰县| 光山县| 博白县| 靖宇县|