Vue插件

246 阅读2分钟

1. vue 官方文档  cn.vuejs.org/v2/guide/pl…

开源插件库  https://github.com/vuejs/awesome-vue 

插件通常用来为vue添加全局功能,是对Vue的功能的增强和补充。

插件的功能范围没有严格的限制,一般有下面几种: 

  - 1.  添加全局方法或属性

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

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

  - 4. 添加vue实例方法,通过把它们添加到Vue.prototype上实现。

  - 5. 一个库,提供自己的API,同时提供上面提到的一个或多个功能

2. 开发插件

   Vue.js的插件应该暴露一个install方法,这个方法的第一个参数是Vue构造器,第二个参数是一个可选的选项对象。  

官网代码参考: 

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

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

  // 3. 注入组件选项
  Vue.mixin({
    created: function () {
      // 逻辑...
    }
    ...
  })

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

3. 插件的使用

  可以通过全局方法Vue.use()来全局注册使用插件,他需要在你调用new Vue()启动应用之前完成。

...
import Vue from 'vue'
import MyPlugin from './plugins/plugins.js'
// 通过全局方法Vue.use()即可使用该插件,它自动会调用install方法
// 调用 `MyPlugin.install(Vue)`
Vue.use(MyPlugin)

new Vue({
  // ...组件选项
})

也可以传入一个可选的选项对象

Vue.use(MyPlugin, { someOption: true })

Vue.use会自动阻止注册相同插件多次,届时只会注册一次该插件。

4.vue 插件编写方法

  - 1. 添加全局方法或属性

var behaviourPlugin = {}

behaviourPlugin.install = function(Vue, options) {

  Vue.$myData = '小小'

}

export default behaviourPlugin

  在install方法中,我们直接在Vue实例上声明了$myData属性并进行了赋值,当该插件注册后,只要存在Vue实例的地方都可以获取到Vue.$myData的值,因为我们直接绑定在了Vue实例上

  - 2. 添加全局资源

export default {

    install(Vue, options) {

        Vue.directive('focus', {

            bind: function() {},

            // 当绑定元素插入到 DOM 中。
            inserted: function(el, binding, vnode, oldVnode) {

                // 聚焦元素
                el.focus();

            },

            update: function() {},

            componentUpdated: function() {},

            unbind: function() {}

        });

    },

}

  添加全局资源包含了添加全局的指令 / 过滤器 / 过渡 等,上方代码我们通过Vue.directive()添加了一个全局指令v-focus,其主要包含了5种方法,其中inserted代表当绑定元素插入到 DOM 中执行,而el.focus()代表聚焦绑定的元素,这样如果我们在一个input输入框上绑定该指令就会自动进行focus聚焦。

vue自定义指令 : cn.vuejs.org/v2/guide/cu…

3. 添加全局mixin方法

export default {
    install(Vue, options) {
        Vue.mixin({
            methods: {
                greetingFn() {
                    console.log('greeting');
                }
            }
        });
    },

  我们可以全局注册一个混合,它会影响注册之后创建的每一个实例,注册后会在每个组件实例中添加greetingFn 方法。

 4. 添加实例方法

export default {
    install(Vue, options) {
        Vue.prototype.$myName = '劳卜';
        Vue.prototype.showMyName = value => {
            console.log(value);
        };
    },
}

   添加实例方法是最常用的一种方法,其直接绑定在vue的原型链上,实例方法可以在组件内部,通过this.$myMethods来调用