Vue.js 插件开发

使用插件

全局方法

// 调用 new Vue() 启动应用之前完成
Vue.use(MyPlugin)

new Vue({
  // ...组件选项
})
//传参
Vue.use(MyPlugin, { someOption: true })

开发插件

Vue.js 的插件应该暴露一个 install 方法。

这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象:

MyPlugin.install = function (Vue, options) {}

1. 添加全局属性和方法

  Vue.myGlobalMethod = function () {
    // 逻辑...
  }

在外面通过Vue实例调用,如

Vue.myGlobalMethod()

2. 添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现

  Vue.prototype.$myMethod = function (methodOptions) {
    // 逻辑...
  }

在组件里调用, 如

this.$myMethod()

3. 通过全局混入来添加一些组件选项

Vue.mixin({
    created: function () {
      // 逻辑...
    }
    ...
  })

混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。

一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

混入对象的钩子在组件自身钩子之前调用

// 定义一个混入对象
var myMixin = {
  data: function () {
    return {
      message: 'hello',
      foo: 'abc'
    }
  },
  created: function () {
    this.hello()
  },
  methods: {
    hello: function () {
      console.log('hello from mixin!')
    }
  }
}

// 使用混入
new Vue({
  mixins: [myMixin]
})

4. 添加全局资源:指令/过滤器/过渡等

Vue.directive('my-directive', {
    bind (el, binding, vnode, oldVnode) {
      // 逻辑...
    }
    ...
  })

自定义指令

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})
//组件内定义
directives: {
  focus: {}
}

然后你可以在模板中任何元素上使用新的 v-focus 属性,如下:

<input v-focus="" />

过滤器

全局定义过滤器

Vue.filter('capitalize', function (value) {
  if (!value) return ''
  value = value.toString()
  return value.charAt(0).toUpperCase() + value.slice(1)
})

组件内定义

filters: {
  capitalize: function (value) {
  }
}

使用场景

{{ message | capitalize }}

使用配置文件,按需加载

*.config.js:vant的按需加载配置

import {  Toast,  Button} from 'vant'
const components = {  Toast,  Button}
const componentsHandler = {
  install(Vue){
    Object.keys(components).forEach(key => Vue.use(components[key]))
  }
}
export default componentsHandler

按需加载的常用插件

babel-plugin-import:按需加载

参考:

Vue官方文 插件

Vue 插件的开发和使用

Re从零开始的组件库构建与发布流程