考虑一个简单的Vue博客:
我正在使用Vuex作为我的数据存储区,我需要设置两个getters:.0
获取器,用于按ID检索getPost
,以及返回post
每个特色帖子的前几个字符。特色帖子列表的数据存储架构按其ID引用帖子。为了显示摘录,需要将这些ID解析为实际帖子。
商品/ state.js
listFeaturedPosts
商品/ getters.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',
]
}
商品/ index.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);
}
根据文档,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
})
参数可用于访问其他getter。但是,当我尝试从getters
内部访问getters
时,它是空的,并且由于listFeaturedPosts
在该上下文中未定义而在控制台中出现错误。
如何在上面的示例中从getters.getPost
内部将getPost
称为Vuex getter?
答案 0 :(得分:72)
安吉的答案很接近......
在VueJS 2.0中,您将传递state
和getters
。所以这应该适用于 store / getters.js :
export default foo = (state, getters) => {
return getters.yourGetter
}
答案 1 :(得分:9)
我在没有state
的情况下进行了测试,并且没有在vuejs 2.5.16中工作。这就是为什么state
是必要的。
这有效:
export default foo = (state, getters) => {
return getters.yourGetter
}
这没有用
export default foo = (getters) => {
return getters.yourGetter
}
答案 2 :(得分:3)
传递getters
作为第二个参数来访问本地和非命名间隔的getter。对于命名空间模块,应使用rootGetters
(作为 4th 参数,以便访问在另一个模块中定义的getter):
export default foo = (state, getters, rootState, rootGetters) => {
return getters.yourGetter === rootGetters['moduleName/getterName']
}
答案 3 :(得分:2)
来信者会收到其他获得者作为第二个论点
getters: {
doneTodos: state => {
return state.todos.filter(todo => todo.done)
},
doneTodosCount: (state, getters) => {
return getters.doneTodos.length
}
}
这是官方文档的链接-https://vuex.vuejs.org/guide/getters.html#property-style-access
答案 4 :(得分:-2)
而不是传递状态,传递 getters ,然后调用您想要的任何其他getter。希望能帮助到你。
在您的商店/ getters.js
export default foo = (getters) => {
return getters.anyGetterYouWant
}