添加全局功能

2017-10-21  本文已影响90人  回调的幸福时光

最近遇到一个问题,在封装了axios之后,每次调用时都需要先引入,这样很麻烦,于是就想能不能添加成全局功能。在vue官方文档中,找到了插件开发一节。

添加实例方法

比如要定义一个fetch插件,用来完成ajax操作。

fetch.js

const install = function (Vue) {
  // 通过installed属性判断组件是否注册过
  if (install.installed) {
    return
  }
  install.installed = true;
  
  // Object.defineProperties()方法直接在现有的对象上定义新的属性或修改现有属性,并返回该对象
// 即在Vue.prototype上添加了$fetch
  Object.defineProperties(Vue.prototype, {
    $fetch: {
      get() {
        return xxx   // 这里返回定义的fetch功能
      }
    }
  })
}

export default {
  install
}

不理解get()的同学请查阅Object/defineProperties的文档MDNMSDN

main.js

import Vue from 'vue'
import fetch from 'fetch.js'

// 调用 `fetch.install(Vue)`
Vue.use(fetch)

这样在组件中直接通过this.$fetch就可以调用

添加全局方法

全局方法是,直接添加在vue上,而不是vue.prototype。

fetch.js

const install = function (Vue) {
  // 通过installed属性判断组件是否注册过
  if (install.installed) {
    return
  }
  install.installed = true;
  
  Vue.$fetch = xxxx
  }

export default {
  install
}

main.js

import Vue from 'vue'
import fetch from 'fetch.js'

// 调用 `fetch.install(Vue)`
Vue.use(fetch)

此时不可以通过this调用$fetch方法,而必须通过引入vue调用。

可以把$fetch理解成是类的静态方法,通过实例无法调用

上一篇下一篇

猜你喜欢

热点阅读