2017-09-14 100 views
2

考慮一個簡單的Vue博客。我使用Vuex作爲數據存儲,我需要設置兩個getters:一個getPost獲取器,用於通過ID檢索post,以及返回每個有特色的帖子的前幾個字符的listFeaturedPosts。特色帖子列表的數據存儲架構通過其ID來引用帖子。爲了顯示摘錄,這些ID需要解析爲實際的帖子。如何從Vuex中的另一個吸氣器調用吸氣劑?

存儲/ state.js

export const state = { 
    featuredPosts: [2, 0], 
    posts: [ 
    'Lorem et ipsum dolor sit amet', 
    'Lorem et ipsum dolor sit amet', 
    'Lorem et ipsum dolor sit amet', 
    'Lorem et ipsum dolor sit amet', 
    'Lorem et ipsum dolor sit amet', 
    ] 
} 

存儲/ getters.js

export default getPost = (state) => (postID) => { 
    return state.posts[postID] 
} 

export default listFeaturedPosts = (state, getters) =>() => { 
    console.log(getters) // {} 

    return state.featuredPosts.map(postID => getters.getPost(postID).substring(0, EXCERPT_LENGTH); 
} 

存儲/ index.js

import Vue from 'vue' 
import Vuex from 'vuex' 
import state from './state' 
import * as getters from './getters' 
import * as mutations from './mutations' 

Vue.use(Vuex) 

export default new Vuex.Store({ 
    state, 
    getters, 
    mutations 
}) 

Accordin g到文檔中,getters參數可以用來訪問其他getter。但是,當我嘗試從listFeaturedPosts內部訪問getters時,它是空的,並且由於在該上下文中未定義getters.getPost,所以在控制檯中出現錯誤。

在上面的例子中,我如何從listFeaturedPosts內部調用getPost作爲Vuex吸氣劑?

回答

4

安吉的答案是接近....

在VueJS 2.0,你會經過stategetters。所以這應該在store/getters.js

export default foo = (state, getters) => { 
    return getters.yourGetter 
} 
1

而不是通過狀態,通過獲得者然後調用任何你想要的其他吸氣劑。希望能幫助到你。

在你的店/ getters.js

export default foo = (getters) => { 
    return getters.anyGetterYouWant 
}