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

溫馨提示×

溫馨提示×

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

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

如何在Vue框架中引入JS庫

發布時間:2021-04-13 16:55:47 來源:億速云 閱讀:307 作者:Leah 欄目:web開發

如何在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.vue
export 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的原型對象上:

// axios.js
import axios from 'axios';

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

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

// entry.js
import AxiosPlugin from './axios.js';
Vue.use(AxiosPlugin);

new Vue({
 created() {
 console.log(this.$http ? 'Axios works!' : 'Uh oh..');
 }
})

插件參數設置

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

// axios.js
import axios from 'axios';

export default {
 install: function(Vue, name = '$http') {
 Object.defineProperty(Vue.prototype, name, { value: axios });
 }
}
// entry.js
import AxiosPlugin from './axios.js';
Vue.use(AxiosPlugin, '$axios');

new Vue({
 created() {
 console.log(this.$axios ? 'Axios works!' : 'Uh oh..');
 }
})

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

vue
AI

玛纳斯县| 谢通门县| 敖汉旗| 老河口市| 佛冈县| 清丰县| 海林市| 新余市| 延吉市| 依兰县| 蓬莱市| 华坪县| 同德县| 天峨县| 乐都县| 寿宁县| 望奎县| 乌审旗| 武隆县| 沭阳县| 娄底市| 东城区| 门源| 乐安县| 文昌市| 英山县| 乌兰察布市| 贺兰县| 洛南县| 苍南县| 马关县| 黑山县| 辰溪县| 岑溪市| 徐汇区| 敦煌市| 特克斯县| 红安县| 会同县| 普格县| 龙川县|