你也許不知道的Vuejs - 插件開發(fā)

you-may-not-know-vuejs.png

by yugasun from https://yugasun.com/post/you-may-not-know-vuejs-10.html
本文可全文轉(zhuǎn)載住涉,但需要保留原作者和出處呵萨。

初識插件

雖然 Vue.js 已經(jīng)足夠強(qiáng)大了承桥,但是在實際開發(fā)中足淆,我們還是需要引入各種模塊來實現(xiàn)我們的功能需求尖滚,或者給全局的 Vue 對象添加一些全局功能,而 Vue 插件 就是來幫助我們完成這項工作的。

開發(fā)插件

Vuejs 插件范圍沒有限制薪铜,一般有以下幾種:

  1. 添加全局方法或者屬性,如:vue-custom-element
  2. 添加全局資源:指令恩溅、過濾器隔箍、過度等,如: vue-touch
  3. 通過全局 mixin 方法添加一些組件選項脚乡,如:vue-router
  4. 添加 Vue 實例方法蜒滩,通過把它們添加到 Vue.prototype 上實現(xiàn)。
  5. 一個庫奶稠,提供自己的 API俯艰,同時提供上面提到的一個或多個功能,如:vue-router

Vuejs 插件應(yīng)當(dāng)有一個公開方法 install锌订,這個方法的第一個參數(shù)是 Vue 構(gòu)造器竹握,第二個參數(shù)是一個可選的配置對象,書寫方式如下:

MyPlugin.install = function(Vue, options) {
  // 1. 添加全局方法或?qū)傩?  Vue.myGlobalProp = 'yugasun';
  Vue.myGlobalMethod = function() {
    // 邏輯
  };

  // 2. 添加全局資源:
  Vue.directive('my-directive', {
    bind(el, binding, vnode, oldVnode) {
      // 邏輯
    }
  });

  // 3. 注入通用方法或?qū)傩越o組件
  Vue.mixin({
    data(){
      return {
        // 通用數(shù)據(jù),
      };
    },
    created() {
      // 邏輯
    },
  });

  // 4. 添加實例方法
  Vue.prototype.$myMethod = function(methodOptions) {
    // 邏輯
  };
};

使用插件

插件使用起來很簡單辆飘,只需要引入涩搓,然后通過調(diào)用 Vue.use() 方法就行了:

import Vue from 'vue';
import MyPlugin from './MyPlugin';
Vue.use(MyPlugin, {someOption: true});

開發(fā)組件

我們這里以 vue-axios-plugin 為例,它是一個對 axios 二次封裝的插件劈猪,便于在項目中直接通過 this.$http.get/post 來直接調(diào)用請求方法昧甘。

首先根據(jù)上面的模板,創(chuàng)建入口文件 vue-axios-plugin.js

const VueAxiosPlugin = {}
VueAxiosPlugin.install = (Vue, options) => {

}
export default VueAxiosPlugin

然后給 Vue 添加實例方法:

import axios from 'axios'
const VueAxiosPlugin = {}
VueAxiosPlugin.install = (Vue, options) => {
  const service = axios.create(options)
  Vue.prototype.$axios = service
  Vue.prototype.$http = {
    get: (url, data, options) => {
      let axiosOpt = {
        ...options,
        ...{
          method: 'get',
          url: url,
          params: data
        }
      }
      return service(axiosOpt);
    },
    post: (url, data, options) => {
      let axiosOpt = {
        ...options,
        ...{
          method: 'post',
          url: url,
          data: data
        }
      }
      return service(axiosOpt);
    }
  }
}
export default VueAxiosPlugin

具體 axios 的使用方法战得,請閱讀官方文檔 axios

現(xiàn)在已經(jīng)完成插件的基本開發(fā)了充边,在項目中測試下,:

import VueAxiosPlugin from './vue-axios-plugin'
Vue.use(VueAxiosPlugin)

然后你就可以在你的組件中直接使用添加的全局方法了:

 var app = new Vue({
  el: '#app',
  data: {
    content: 'Sending...'
  },
  methods: {
    getUserInfo() {
      Promise.all([
        this.$http.get('http://yapi.demo.qunar.com/mock/5802/user', { id: 1 }),
        this.$http.post('http://yapi.demo.qunar.com/mock/5802/user', {
          username: 'yugasun',
        }, {
          headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
          }
        })
      ]).then((res) => {
        console.log(res)
      }).catch((e) => {
        console.log(e)
      })
    }
  },
  created() {
    this.getUserInfo()
  }
})

發(fā)布組件

插件已經(jīng)寫好了,你可以復(fù)制該文件在不同的項目中復(fù)用了浇冰。如果覺得每次都復(fù)制文件比較麻煩贬媒,你可以通過閱讀上一篇 定制開發(fā)項目模板 文章,將該插件文件直接添加到項目模板中即可肘习。當(dāng)然如果你的插件足夠好际乘,也可以發(fā)布到 npm 社區(qū),供全世界的程序員同胞使用漂佩。

每次項目緊急脖含,有個需求很難搞定時,我們就會想著從 github 上搜索我們需要的項目投蝉,既然我們從社區(qū)獲取了那么多养葵,當(dāng)然也要學(xué)會感恩,偶爾嘗試著去回報下瘩缆,不求代碼有多么高的質(zhì)量关拒,哪怕是單純地幫助修改一個說明文檔中的錯誤,那也是一份貢獻(xiàn)庸娱,也許你的這次修改可以幫助別人節(jié)省半天的時間着绊,任何項目都是在不斷迭代中成長的。

隨時歡迎進(jìn)入全球最大的同性交友網(wǎng)站 GayGithub熟尉,貢獻(xiàn)你的第一份源代碼~

源碼在此

專題目錄

You-May-Not-Know-Vuejs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末归露,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子臣樱,更是在濱河造成了極大的恐慌,老刑警劉巖腮考,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雇毫,死亡現(xiàn)場離奇詭異,居然都是意外死亡踩蔚,警方通過查閱死者的電腦和手機(jī)棚放,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馅闽,“玉大人飘蚯,你說我怎么就攤上這事「R玻” “怎么了局骤?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長暴凑。 經(jīng)常有香客問我峦甩,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任凯傲,我火速辦了婚禮犬辰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冰单。我一直安慰自己幌缝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布诫欠。 她就那樣靜靜地躺著涵卵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呕诉。 梳的紋絲不亂的頭發(fā)上缘厢,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音甩挫,去河邊找鬼贴硫。 笑死,一個胖子當(dāng)著我的面吹牛伊者,可吹牛的內(nèi)容都是我干的英遭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼亦渗,長吁一口氣:“原來是場噩夢啊……” “哼挖诸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起法精,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤多律,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搂蜓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狼荞,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年帮碰,在試婚紗的時候發(fā)現(xiàn)自己被綠了相味。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡殉挽,死狀恐怖丰涉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斯碌,我是刑警寧澤一死,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站傻唾,受9級特大地震影響摘符,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一逛裤、第九天 我趴在偏房一處隱蔽的房頂上張望瘩绒。 院中可真熱鬧,春花似錦带族、人聲如沸锁荔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阳堕。三九已至,卻和暖如春择克,著一層夾襖步出監(jiān)牢的瞬間恬总,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工肚邢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壹堰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓骡湖,卻偏偏與公主長得像贱纠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子响蕴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載 :OpenDiggawesome-github-vue 是由OpenDigg整理并維護(hù)的Vue相關(guān)開源項目庫...
    果汁密碼閱讀 23,130評論 8 124
  • 目錄 UI組件 開發(fā)框架 實用庫 服務(wù)端 輔助工具 應(yīng)用實例 Demo示例 UI組件 element★13489 ...
    余生社會閱讀 19,768評論 7 233
  • UI組件element ★11612 - 餓了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于...
    董董董董董董董董董大笨蛋閱讀 8,519評論 6 123
  • 昨晚其實不只是夢見了打架一事谆焊,我在離醒來很近的時候做了一個噩夢:我夢見我小叔的二兒子阿古,他死了浦夷!這嚇到我辖试,可是后...
    BU3001閱讀 371評論 0 0
  • 【場景一】 某大型相親節(jié)目的錄制搬到了室外,在美麗的海邊劈狐,夜間舉行罐孝,奇怪的是由我來擔(dān)任主持人。我從來沒有做過類似事...
    閱_閱讀 263評論 0 0