具有参数的Vue命名空间模块

时间:2019-07-26 10:46:47

标签: vue.js vuex

我的商店设置

# State
export default {
 servers: []
}

和我的 getter 如下

# Getter
export function serverById (state, id) {
 return state.servers.find(server => server.id === id)
}

从Vue组件中调用我的吸气剂

computed: {
  ...mapGetters({
  //   server: 'servers/serverById'
  }),
  getServers () {
    return this.$store.getters['servers/serverById'][22]
  }
}

我不断得到

  

vue.runtime.esm.js?2b0e:619 [Vue警告]:安装的挂钩中存在错误:   “ TypeError:无法读取未定义的属性'22'”

当我换成圆括号时

computed: {
  ...mapGetters({
  //   server: 'servers/serverById'
  }),
  getServers () {
    return this.$store.getters['servers/serverById'](22)
  }
}
  

[Vue警告]:挂接的钩子中出现错误:“ TypeError:   this。$ store.getters.servers / serverById不是函数“

我尝试将mapGetter选项与方法结合使用,但还是没有运气。

methods: {
  getServerDetails (id) {
    return this.server(id)
  }
}

2 个答案:

答案 0 :(得分:1)

vuex.vuejs.org/guide/getters.html查找“方法样式访问”部分。在吸气剂中,您需要返回带有id参数的方法。

export function serverById (state) {
 return id => state.servers.find(server => server.id === id)
}

并用 this.$store.getters['servers/serverById'](22)

答案 1 :(得分:0)

您的吸气剂应采用以下格式:

serverById : (state) => (id) => {
    return state.servers.find(server => server.id === id)
  }

对于命名空间模块,您可以使用以下方式访问getters

...mapGetters('myNamespacedModule', ['myGetterName'])