我正在开始使用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中调用插件方法?任何帮助表示赞赏。
答案 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模式下工作