如何从Vuex的另一个getter中调用getter?

时间:2017-09-14 03:35:18

标签: vuejs2 vuex

考虑一个简单的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?

5 个答案:

答案 0 :(得分:72)

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

在VueJS 2.0中,您将传递stategetters。所以这应该适用于 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
}