在vuex getter中访问Nuxt插件功能

时间:2020-05-04 13:43:35

标签: javascript plugins vuex nuxt.js

我正在开始使用nuxtjs和vuex。我刚从getter访问组合注入的插件函数时遇到问题。例如:

nuxt.config.js

...
plugins: [
  '~/plugins/myplugin.js'  
  ],
...

〜/ plugins / myplugin.js

function doSomething(string) {
        console.log("done something: " + string)
    }

export default ({ app }, inject) => {
    inject('doSomething', (string) => doSomething(string))
  }

〜/ store / index.js

export const actions = {
    someAction({commit}) {
        this.$doSomething("Called from Action") // works
    }
}

export const getters = {
    someGetter: state => {
        this.$doSomething("Called from Getter") // throws error
    }
}

该代码适用于操作someAction,但在getter someGetter中的调用将导致错误,提示未定义this

nuxt文档仅显示了通过突变和动作访问注入的插件函数的示例,但未明确提及getter无法访问插件函数。在nuxt中甚至可能发生这种情况,还是有充分的理由不在getter中调用插件方法?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您不应该尝试在吸气剂中do_something。吸气剂仅用于从商店的状态中得出状态。关键是您不必分别存储和保持最新的派生状态。例如,您有一个任务列表,并且有一个已完成任务的获取器,而不是一个单独的已完成任务列表:completedTasks: state => state.tasks.filter(task => task.completed)

仅应将突变用于改变商店的状态。

最后,在操作中,您可以与所需的任何内容进行交互,例如某处或this.$do_something的Web服务器API,然后触发突变以根据结果更新状态。

所以我想说Nuxt在这里所做的是有意义的,以便注入动作而不是吸气剂。

答案 1 :(得分:0)

我也遇到了同样的问题,我能够通过

解决它
export const getters = {
  someGetter: state => {
    $nuxt.$doSomething("Called from Getter") // Grab $nuxt from the global scope
  }
}

不确定是否可以在SSR模式下工作