2017-05-03 60 views
3

即使我可以在Vue Dev Tools中看到getter,但无法从我的组件中的一个Vuex模块访问获得者。无法访问模块之外的Vuex获取器

store.js文件:

import Vue from 'vue'; 
import Vuex from 'vuex'; 
import subsub from './modules/subsub'; 

Vue.use(Vuex); 
export default new Vuex.Store({ 
    state: { }, 
    actions: { }, 
    mutations: { }, 
    getters: { }, 
    modules: { 
    subsub, 
    }, 
}); 

modules/subsub.js文件:

const state = { 
    categories: [{ 
    name: 'one', 
    path: 'two', 
    ... 
    }, { 
    name: 'twocat', 
    path: 'two', 
    ... 
    }], 
}; 

const actions = { }; 
const mutations = { }; 
const getters = { 
    filterCategories(state) { 
    return state.categories; 
    }, 
    filtertwo(state) { 
    const filteri = state.categories.filter((catee) => { 
     return catee.name === 'twocat'; 
    }); 
    return filteri; 
    }, 
}; 

export default { 
    namespaced: true, 
    state, 
    actions, 
    mutations, 
    getters, 
}; 

我的组件:

<template> 
    <div> {{ filterCategories }} </div> 
</template> 

<script>  
import { mapGetters } from 'vuex'; 

export default { 
    computed: { 
    ...mapGetters([ 
     'categories', 
     'filtertwo', 
     'filterCategories', 
    ]), 
    filtertwo() { 
     return this.$store.getters.filtertwo; 
    }, 
    filterCategories() { 
     return this.$store.getters.filterCategories; 
    }, 
    }, 

</script> 

所以,我缺少的是什么?是否有任何其他语法来从模块访问getters?

+0

你在控制台没有收到任何错误?当你实例化Vue时,你是否通过商店? – thanksd

+0

我在控制台中没有收到任何错误。当我实例化Vue时,在商店中传递什么意思? ..顺便说一句,我尝试使用@click事件获取和即使没有工作 – Marketingexpert

+0

无论你实例化主应用程序Vue组件(可能'main.js')。您应该导入vuex存储并将其包括在传递给'new Vue({...})' – thanksd

回答

5

首先,你没有吸气剂categories,所以你需要添加一个。

其次,您的subsub模块将其namespaced属性设置为true。这意味着,你需要提供的模块名称到mapGetter帮手:

...mapGetters('subsub', [ 
    'categories', 
    'filtertwo', 
    'filterCategories', 
]), 

三,mapGetters函数创建filtertwo,并为你filterCategories计算性能。但是,您正在手动重新定义它们,并将明确引用返回给$store.getters。但是,您没有正确引用名称空间,因此它们将返回undefined。无论是摆脱这些计算性能或正确地引用命名空间:

filtertwo() { 
    return this.$store.getters['subsub/filtertwo']; 
}, 
filterCategories() { 
    return this.$store.getters['subsub/filterCategories']; 
}, 
+0

以我vuex开发工具我看到这一点: subsub/filterCategories:数组[2] 'subsub/filterCategories:数组[2] 0:对象 1:对象 subsub/filtertwo:数组[1] 0:对象' – Marketingexpert

+0

我刚刚添加了subub,因为我的命名空间属性设置为true(thnx,因为我不知道),但是我仍然没有收到任何数据到我的组件中,而在使用Vue Dev工具进入Vuex Tab时,我看到了getters ,但一旦我去我的路由器视图在组件选项卡我得到:filterCategories:undefined filtertwo:undefined – Marketingexpert

+0

@Marketingexpert,我没有注意到,你重新定义'filterCategories'和'filterTwo'计算属性。这就是为什么你仍然在“未定义”。您应该使用'mapGetters'或手动创建计算属性,但不能同时使用两者。看到我更新的答案。 – thanksd

0

我找到了解决办法,对日Thnx从提示@thanksd

通过使用上述其中的命名空间设置为true的例子,我不得不添加以下为部分

filterCategories() { 
     return this.$store.getters['subsub/filterCategories']; 
    }, 

否则,如果我不想加入subsub,我可以只设置命名空间为false。 这个问题花了我一段时间,让我的头。 干杯