亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

如何在 Vue.js 中使用第三方js庫

2019-11-19 16:44:26
字體:
來源:轉載
供稿:網友

在諸多 Vue.js 應用中, Lodash, Moment, Axios, Async等都是一些非常有用的 JavaScript 庫. 但隨著項目越來越復雜, 可能會采取組件化和模塊化的方式來組織代碼, 還可能要使應用支持不同環境下的服務端渲染. 除非你找到了一個簡單而又健壯的方式來引入這些庫供不同的組件和模塊使用, 不然, 這些第三方庫的管理會給你帶來一些麻煩.

本文將介紹一些在 Vue.js 中使用第三方庫的方式.

全局變量

在項目中添加第三方庫的最簡單方式是講其作為一個全局變量, 掛載到 window 對象上:

entry.js

window._ = require('lodash');

MyComponent.vue

export default { created() {  console.log(_.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..'); }}

這種方式不適合于服務端渲染, 因為服務端沒有 window 對象, 是 undefined , 當試圖去訪問屬性時會報錯.

在每個文件中引入

另一個簡單的方式是在每一個需要該庫的文件中導入:

MyComponent.vue

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

這種方式是允許的, 但是比較繁瑣, 并且帶來的問題是: 你必須記住在哪些文件引用了該庫, 如果項目不再依賴這個庫時, 得去找到每一個引用該庫的文件并刪除該庫的引用. 如果構建工具沒設置正確, 可能導致該庫的多份拷貝被引用.

優雅的方式

在 Vuejs 項目中使用 JavaScript 庫的一個優雅方式是講其代理到 Vue 的原型對象上去. 按照這種方式, 我們引入 Moment 庫:

entry.js

import moment from 'moment';Object.definePrototype(Vue.prototype, '$moment', { value: moment });

由于所有的組件都會從 Vue 的原型對象上繼承它們的方法, 因此在所有組件/實例中都可以通過 this.$moment: 的方式訪問 Moment 而不需要定義全局變量或者手動的引入.

MyNewComponent.vue

export default { created() {  console.log('The time is ' . this.$moment().format("HH:mm")); }}

接下來就了解下這種方式的工作原理.

Object.defineProperty

一般而言, 可以按照下面的方式來給對象設置屬性:

Vue.prototype.$moment = moment;

可以這樣做, 但是 Object.defineProperty 允許我們通過一個 descriptor 來定義屬性. Descriptor 運行我們去設置對象屬性的一些底層(low-level)細節, 如是否允許屬性可寫? 是否允許屬性在 for 循環中被遍歷.

通常, 我們不會為此感到困擾, 因為大部分時候, 對于屬性賦值, 我們不需要考慮這樣的細節. 但這有一個明顯的優點: 通過 descriptor 創建的屬性默認是只讀的 .

這就意味著, 一些處于迷糊狀態的(coffee-deprived)開發者不能在組件內去做一些很愚蠢的事情, 就像這樣:

this.$http = 'Assign some random thing to the instance method';this.$http.get('/'); // TypeError: this.$http.get is not a function

此外, 試圖給只讀實例的方法重新賦值會得到 TypeError: Cannot assign to read only property 的錯誤.

$

你可能會注意到, 代理第三庫的屬性會有一個 $ 前綴, 也可能看到其它類似 $refs, $on, $mount 的屬性和方式, 它們也有這個前綴.

這個不是強制要求, 給屬性添加 $ 前綴是提供那些處于迷糊狀態(coffee-deprived)的開發者這是一個公開的 API, 和 Vuejs 的一些內部屬性和方法區分開來.

this

你還可能注意到, 在組件內是通過 this.libraryName 的方式來使用第三方庫的, 當你知道它是一個實例方法時就不會感到意外了. 但與全局變量不同, 通過 this 來使用第三方庫時, 必須確保 this 處于正確的作用域. 在回調方法中 this 的作用域會有不同, 但箭頭式回調風格能保證 this 的作用域是正確的:

this.$http.get('/').then(res => { if (res.status !== 200) {  this.$http.get('/') // etc  // Only works in a fat arrow callback. }});

插件

如果你想在多個項目中使用同一個庫, 或者想將其分享給其他人, 可以將其寫成一個插件:

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

在應用的入口引入插件之后, 就可以在任何一個組件內像使用 Vue Router , Vuex 一樣使用你定義的庫了.

寫一個插件

首先, 創建一個文件用于編寫自己的插件. 在示例中, 我會將 Axios 作為插件添加到項目中, 因而我給文件起名為 axios.js . 其次, 插件要對外暴露一個 install 方法, 該方法的第一個參數是 Vue 的構造函數:

axios.js

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

可以使用先前將庫添加到原型對象上的方法:

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 提供的一個通用名字. 因而可以提供一個可選的參數允許他們隨意命名:

axions.js

import 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..'); }})

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品扒开腿做| 欧美日韩一区二区免费在线观看| 国产不卡精品视男人的天堂| 亚洲精品有码在线| 日本欧美黄网站| 一区二区三区久久精品| 久久久久成人网| 日av在线播放中文不卡| 欧美激情在线一区| 国产自产女人91一区在线观看| 亚洲免费电影在线观看| 国产精品高潮呻吟久久av黑人| 欧美洲成人男女午夜视频| 欧美精品第一页在线播放| 成人www视频在线观看| 欧美主播福利视频| 欧美在线免费观看| 欧美在线激情视频| 国产午夜精品视频免费不卡69堂| 国产免费一区二区三区在线观看| 亚洲黄在线观看| 日韩精品电影网| 欧美性猛交xxxx乱大交3| 欧美另类在线播放| 亚洲精品黄网在线观看| 国产精品视频久久| 日韩中文字幕网| 97国产精品免费视频| 97人人模人人爽人人喊中文字| 欧美激情精品久久久久久大尺度| 尤物yw午夜国产精品视频明星| 久久国产精品免费视频| 在线观看久久av| 欧美激情精品久久久久久变态| 精品免费在线视频| 欧美日韩亚洲国产一区| 欧美孕妇性xx| 欧美精品在线第一页| 久久这里只有精品视频首页| 国产精品久久av| 精品偷拍各种wc美女嘘嘘| 色综合天天综合网国产成人网| 欧美激情一级欧美精品| 78色国产精品| 欧美电影《睫毛膏》| 91欧美精品午夜性色福利在线| 热久久美女精品天天吊色| 成人免费观看49www在线观看| 久久综合伊人77777蜜臀| 欧美亚洲免费电影| 亚洲欧美日韩在线高清直播| 亚洲人成网7777777国产| 国产精品久久久久久久久借妻| 国产亚洲欧美日韩精品| 亚洲精品一区中文| 欧美激情视频在线观看| 2025国产精品视频| 欧美高清在线视频观看不卡| 国产日韩欧美黄色| 亚洲天堂av女优| 久久中文字幕在线视频| 日韩av一区二区在线观看| 国产成人av在线| 日韩精品一区二区三区第95| 国产成人精品日本亚洲| 91九色视频导航| 精品久久久久国产| 国产精品专区第二| 欧美裸体xxxx| 国产精品盗摄久久久| 91av视频在线| 狠狠做深爱婷婷久久综合一区| 欧美性xxxx极品hd满灌| 国产自摸综合网| 国产精品久久久久av免费| 亚洲欧美日韩精品| 亚洲视屏在线播放| 亚洲理论电影网| 亚洲精品欧美日韩专区| 中文字幕日韩欧美精品在线观看| 免费av一区二区| 亚洲女性裸体视频| 国产一区二区三区丝袜| 亚洲国产成人精品久久久国产成人一区| 亚洲va国产va天堂va久久| 久久久精品国产| 亚洲一区二区三区毛片| 亚洲人成在线观看网站高清| 国产日韩欧美黄色| 91美女片黄在线观| 久久精品国产久精国产思思| 第一福利永久视频精品| 国模私拍一区二区三区| 亚洲毛片在线观看| 最近免费中文字幕视频2019| 成人在线免费观看视视频| 亚洲图片欧美日产| 国产日韩欧美综合| 中文字幕亚洲一区二区三区五十路| 亚洲性生活视频| 中文字幕精品一区久久久久| 国产精品丝袜久久久久久不卡| 亚洲国产成人精品一区二区| 久久99久久99精品免观看粉嫩| 欧美午夜精品久久久久久久| 亚洲日韩第一页| 国产综合福利在线| 久久久国产视频| 欧美最顶级丰满的aⅴ艳星| 国产午夜精品美女视频明星a级| 日韩欧美国产黄色| 青草热久免费精品视频| 91精品视频观看| 精品久久久久久久久久国产| 亚洲天堂日韩电影| 亚洲天堂av综合网| 国产成人av网| 日韩av中文字幕在线| 成人有码视频在线播放| 欧美日韩亚洲精品内裤| 欧美激情亚洲综合一区| 国产一区二区免费| 中文字幕av一区中文字幕天堂| 97在线精品视频| 国产精品白丝av嫩草影院| 欧美中文字幕视频| 欧美孕妇毛茸茸xxxx| 国产亚洲精品久久久久久| 91欧美精品成人综合在线观看| 91亚洲精品视频| 精品成人在线视频| 色综久久综合桃花网| 欧美重口另类videos人妖| 亚洲资源在线看| 亚洲欧美日韩中文在线制服| 亚洲欧美资源在线| 日韩在线视频网| 亚洲美女喷白浆| 日韩精品一区二区三区第95| 亚洲最大福利视频网站| 国产成人精品国内自产拍免费看| 宅男66日本亚洲欧美视频| 国产日韩在线亚洲字幕中文| 国产精品成人国产乱一区| 亚洲图片在线综合| 亚洲奶大毛多的老太婆| 91在线视频免费| 欧美亚洲国产另类| 不卡av在线播放| 精品国产一区二区在线| 色阁综合伊人av| 欧美成人全部免费| 国产精品免费网站| 欧美国产精品人人做人人爱| 国产女精品视频网站免费| 2019中文字幕在线免费观看| 欧美精品福利在线| 欧美老妇交乱视频| 日韩在线精品视频| 91免费视频网站| 欧美成人精品在线播放| 国产成人午夜视频网址| 欧美性猛交xxxx免费看久久久| 精品香蕉一区二区三区|