最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年07月30日 16:20:09   作者:Quiet-Night  
最近在學(xué)習(xí)使用vue框架,在使用中遇到了一個(gè)問題,查找相關(guān)資料終于找了正確的姿勢,所以這篇文章主要給大家介紹了關(guān)于在Vue框架中正確引入JS庫的方法,需要的朋友可以參考借鑒,下面來一起看看吧。

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

錯(cuò)誤示范

全局變量法

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

// entry.js:
window._ = require('lodash');

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

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

處處引入法

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

// MyComponent.vue:
import _ from 'lodash';

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

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

正確引入方式

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

寫成插件

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

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

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

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

如何寫插件

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

最關(guān)鍵的地方在于,我們需要暴露一個(gè)將Vue構(gòu)造器作為第一個(gè)參數(shù)的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實(shí)例的use方法就能將這個(gè)庫引入整個(gè)項(xiàng)目了。我們像下面代碼一樣簡單引入:

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • 圖解Vue?響應(yīng)式流程及原理

    圖解Vue?響應(yīng)式流程及原理

    這篇文章主要為大家介紹了圖解Vue的響應(yīng)式原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue-json-editor json編輯器的使用

    vue-json-editor json編輯器的使用

    本文主要介紹了vue-json-editor json編輯器的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • vue實(shí)現(xiàn)兄弟組件之間跳轉(zhuǎn)指定tab標(biāo)簽頁

    vue實(shí)現(xiàn)兄弟組件之間跳轉(zhuǎn)指定tab標(biāo)簽頁

    這篇文章主要介紹了vue實(shí)現(xiàn)兄弟組件之間跳轉(zhuǎn)指定tab標(biāo)簽頁,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue3中sync修飾符的使用詳解

    vue3中sync修飾符的使用詳解

    .sync修飾符是Vue中用于實(shí)現(xiàn)子組件修改父組件傳遞的props值并更新到父組件的功能,它實(shí)際上是一個(gè)語法糖,將子組件的props綁定到一個(gè)名為update:propName的自定義事件上,本文給大家介紹了vue3中sync修飾符的使用,需要的朋友可以參考下
    2023-10-10
  • uni-app獲取當(dāng)前環(huán)境信息的方法

    uni-app獲取當(dāng)前環(huán)境信息的方法

    uni-aap提供了異步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2個(gè)API獲取系統(tǒng)信息,這篇文章主要介紹了uni-app獲取當(dāng)前環(huán)境信息的相關(guān)知識,需要的朋友可以參考下
    2022-11-11
  • 深入理解Vue官方文檔梳理之全局API

    深入理解Vue官方文檔梳理之全局API

    本篇文章主要介紹了深入理解Vue官方文檔梳理之全局API,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Element中el-select下拉框?qū)崿F(xiàn)選中圖標(biāo)并回顯圖標(biāo)

    Element中el-select下拉框?qū)崿F(xiàn)選中圖標(biāo)并回顯圖標(biāo)

    本文主要介紹了Element中el-select下拉框?qū)崿F(xiàn)選中圖標(biāo)并回顯圖標(biāo),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • vue-router next(false) 禁止訪問某個(gè)頁面時(shí),不保留歷史訪問記錄問題

    vue-router next(false) 禁止訪問某個(gè)頁面時(shí),不保留歷史訪問記錄問題

    這篇文章主要介紹了vue-router next(false) 禁止訪問某個(gè)頁面時(shí),不保留歷史訪問記錄問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 如何使用Vue3+elementPlus的Tree組件實(shí)現(xiàn)一個(gè)拖拽文件夾管理

    如何使用Vue3+elementPlus的Tree組件實(shí)現(xiàn)一個(gè)拖拽文件夾管理

    最近在做一個(gè)文件夾管理的功能,要實(shí)現(xiàn)一個(gè)樹狀的拖拽文件夾面板,里面包含兩種元素,文件夾以及文件,這篇文章主要介紹了使用Vue3+elementPlus的Tree組件實(shí)現(xiàn)一個(gè)拖拽文件夾管理?,需要的朋友可以參考下
    2023-09-09
  • Vue項(xiàng)目代碼之路由拆分、Vuex模塊拆分、element按需加載詳解

    Vue項(xiàng)目代碼之路由拆分、Vuex模塊拆分、element按需加載詳解

    這篇文章主要介紹了Vue項(xiàng)目代碼之路由拆分、Vuex模塊拆分、element按需加載,項(xiàng)目較大路由較多時(shí),路由拆分是一個(gè)不錯(cuò)的代碼優(yōu)化方案,按不同業(yè)務(wù)分為多個(gè)模塊,結(jié)構(gòu)清晰便于統(tǒng)一管理,本文通過示例給大家詳細(xì)講解,需要的朋友可以參考下
    2022-11-11

最新評論

安阳县| 奈曼旗| 宝坻区| 合川市| 屏东市| 邮箱| 临沧市| 左贡县| 南岸区| 嘉峪关市| 四子王旗| 乡宁县| 承德市| 荣昌县| 辉南县| 灵丘县| 三台县| 兴仁县| 新郑市| 多伦县| 双柏县| 图们市| 乌苏市| 祁门县| 若尔盖县| 海淀区| 莫力| 承德市| 习水县| 元朗区| 葫芦岛市| 从化市| 石景山区| 陵水| 垣曲县| 鄂托克前旗| 浪卡子县| 南通市| 托克托县| 遂溪县| 镇远县|