嗨,我需要具有有效负载的create函数。 在Vuex中,我创建了:
const getters = {
[GettersTeam.GET_TEST](state) {
return state.teams;
},
[GettersTeam.GET_TEAM]: state => id => {
console.log("Run function!");
console.log(id);
return state.teams;
},
};
接下来,我在组件中使用此功能:
mounted() {
this.GET_TEAM(1);
},
methods: {
...mapGetters('TeamModule', [GettersTeam.GET_TEAM]),
},
函数this.GET_TEAM(1)
无任何返回。我认为问题出在名称函数[GettersTeam.GET_TEAM]
上,但我不知道如何使用命名空间命名函数。函数this.GET_TEST()
正常工作。
编辑:
我将功能从methods
移到了computed
。
computed: {
...mapGetters('TeamModule', {
teamList: [GettersTeam.GET_TEAM],
}),
},
<template>
<div>
teamList: {{ teamList }}
</div>
</template>
但是当我尝试在模板Vue中使用teamList
时,我得到了这个信息:
teamList:函数(id){console.log(id);返回state.teams; }
答案 0 :(得分:3)
您需要将mapGetters
放在computed
部分,而不是methods
:
computed: {
...mapGetters('TeamModule', [GettersTeam.GET_TEAM]),
},
https://vuex.vuejs.org/guide/getters.html#the-mapgetters-helper
鉴于您将其作为方法调用,这似乎有点违反直觉,但是从组件的角度来看,它仍然只是一个属性。碰巧该属性返回一个函数。
更新:
基于新问题...
在您的模板中,您有{{ teamList }}
。那将获取属性this.teamList
的值。
属性this.teamList
是一个计算属性,因此Vue将在幕后调用定义函数。该定义函数是由mapGetters
创建的,但实际上它只是调用商店的getter,并向其传递相关的state
对象。
您已经这样定义了吸气剂:
[GettersTeam.GET_TEAM]: state => id => {
忽略括号中的位,在此并不重要。关键位是state => id => {
部分。这里有两个函数,一个由另一个函数返回。
实际上等效于此:
[GettersTeam.GET_TEAM] (state) {
return function (id) {
console.log("Run function!");
console.log(id);
return state.teams;
}
}
因此,当您访问计算的属性时,您将只是在调用该外部函数。它将返回内部函数,即您所看到的模板。
要获取内部函数返回的值,您需要调用它。例如:
{{ teamList(1) }}
我还要指出,您当前对getter的实现只是忽略了id
。目前尚不清楚您要做什么,但我认为您打算基于id
进行搜索以在state.teams
中查找特定条目。
答案 1 :(得分:1)
为您制作了Codepen。
您的mapGetters
呼叫应为mapGetters([GettersTeam.GET_TEAM])
,而您的this.GET_TEAM(1);
呼叫应为this[GettersTeam.GET_TEAM](1);
。