你也许不知道的Vuejs - 插件开发

you-may-not-know-vuejs.png

by yugasun from https://yugasun.com/post/you-may-not-know-vuejs-10.html
本文可全文转载,但需要保留原作者和出处。

初识插件

虽然 Vue.js 已经足够强大了,但是在实际开发中,我们还是需要引入各种模块来实现我们的功能需求,或者给全局的 Vue 对象添加一些全局功能,而 Vue 插件 就是来帮助我们完成这项工作的。

开发插件

Vuejs 插件范围没有限制,一般有以下几种:

  1. 添加全局方法或者属性,如:vue-custom-element
  2. 添加全局资源:指令、过滤器、过度等,如: vue-touch
  3. 通过全局 mixin 方法添加一些组件选项,如:vue-router
  4. 添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。
  5. 一个库,提供自己的 API,同时提供上面提到的一个或多个功能,如:vue-router

Vuejs 插件应当有一个公开方法 install,这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的配置对象,书写方式如下:

MyPlugin.install = function(Vue, options) {
  // 1. 添加全局方法或属性
  Vue.myGlobalProp = 'yugasun';
  Vue.myGlobalMethod = function() {
    // 逻辑
  };

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

  // 3. 注入通用方法或属性给组件
  Vue.mixin({
    data(){
      return {
        // 通用数据,
      };
    },
    created() {
      // 逻辑
    },
  });

  // 4. 添加实例方法
  Vue.prototype.$myMethod = function(methodOptions) {
    // 逻辑
  };
};

使用插件

插件使用起来很简单,只需要引入,然后通过调用 Vue.use() 方法就行了:

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

开发组件

我们这里以 vue-axios-plugin 为例,它是一个对 axios 二次封装的插件,便于在项目中直接通过 this.$http.get/post 来直接调用请求方法。

首先根据上面的模板,创建入口文件 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

现在已经完成插件的基本开发了,在项目中测试下,:

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()
  }
})

发布组件

插件已经写好了,你可以复制该文件在不同的项目中复用了。如果觉得每次都复制文件比较麻烦,你可以通过阅读上一篇 定制开发项目模板 文章,将该插件文件直接添加到项目模板中即可。当然如果你的插件足够好,也可以发布到 npm 社区,供全世界的程序员同胞使用。

每次项目紧急,有个需求很难搞定时,我们就会想着从 github 上搜索我们需要的项目,既然我们从社区获取了那么多,当然也要学会感恩,偶尔尝试着去回报下,不求代码有多么高的质量,哪怕是单纯地帮助修改一个说明文档中的错误,那也是一份贡献,也许你的这次修改可以帮助别人节省半天的时间,任何项目都是在不断迭代中成长的。

随时欢迎进入全球最大的同性交友网站 GayGithub,贡献你的第一份源代码~

源码在此

专题目录

You-May-Not-Know-Vuejs

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 23,092评论 8 124
  • 目录 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element★13489 ...
    余生社会阅读 19,662评论 7 233
  • UI组件element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于...
    董董董董董董董董董大笨蛋阅读 8,503评论 6 123
  • 昨晚其实不只是梦见了打架一事,我在离醒来很近的时候做了一个噩梦:我梦见我小叔的二儿子阿古,他死了!这吓到我,可是后...
    BU3001阅读 361评论 0 0
  • 【场景一】 某大型相亲节目的录制搬到了室外,在美丽的海边,夜间举行,奇怪的是由我来担任主持人。我从来没有做过类似事...
    阅_阅读 258评论 0 0