在.js文件中访问Nuxt插件

时间:2018-11-14 14:48:56

标签: javascript vue.js nuxt

假设我有一个脚本文件foo.js

function doStuff() {
   // how to access store and other plugins here?
}

export default { doStuff }

在不将调用组件作为参数传递的情况下,如何在上述脚本文件中访问app之类的东西或storei18n之类的已安装插件?

1 个答案:

答案 0 :(得分:2)

调用自定义函数有多种方法,this是对其调用所在组件的引用。

1)使用mixins

可以将自定义函数声明为方法,并通过this.customMethod在组件内使用。

customHelpers.js

const customHelpers = {
  methods: {
    doStuff () {
      // this will be referenced to component it is executed in
    }
  }
}

component.vue

// component.vue
import customHelpers from '~/mixins/customHelpers'
export default {
  mixins: [customHelpers],
  mounted () {
    this.doStuff()
  }
}

2。使用context injection

声明自定义插件:

plugins/customHelpers.js

import Vue from 'vue'

Vue.prototype.$doStuff = () => { /* stuff happens here */ }

并在nuxt.config.js

中使用插件
export default {
  ..., // other nuxt options
  plugins: ['~/plugins/customHelpers.js']
}

这使方法在每个组件内可用:

export default {
  mounted () {
    this.$doStuff()
  }
}

3)使用combined injection

与方法 2 相同,但也可以在fetchasyncData和商店模块内部访问注入。对this的绑定可能会有所不同,因为上下文并非在任何地方都可用。

plugins/customHelpers.js

export default ({ app }, inject) => {
  inject('doStuff', () => { /* stuff happens here */ })
}

并在nuxt.config.js

中使用插件
export default {
  ..., // other nuxt options
  plugins: ['~/plugins/customHelpers.js']
}

用法示例:

export default {
  asyncData ({ app }) {
    app.$doStuff()
  }
}

请参考documentation,以获取更多示例。