首页 > 解决方案 > 方法函数如何从 vuex 商店调用变量?

问题描述

在我的Vue.js组件中,我有v-select元素。当用户在该小部件中选择某个值时,我调用块toDo中定义的函数。methods正如您在该函数中看到的那样,我想知道被调用的 getter 的值filters。不幸的是,它返回了我undefined。同时在 Vue 的 DevTools 中,我注意到这个 getter 是有价值的。如何在函数中正确获取 getter 的值?

问题:

filters在模板中使用,它们显示在界面上没有任何问题。但在toDo函数中,filters返回undefined结果相同。我想了解这种奇怪的行为。

<div
    v-for="filter in filters"
    :key="filter.id">
    <v-checkbox
        v-for="(item, index) in filter.values"
        :label="filter.description_values[index]"
        :value="item"
        :key="item"
        v-model="filter.selected_values"
        hide-details>
    </v-checkbox>
    <v-select
        v-if="filter.widget==='single_dropdown'"
        v-model="filter.selected_values"
        :items="filter.filter_values"
        label="Select ..."
        dense
        solo
        @change="toDo">
    </v-select>
</div>

***
computed: {
  ...mapGetters('store', [
    'filters'
  ]),
},
methods: {
  toDo: async (value) {
    await console.log(this.filters) // result: undefined
  }
}
***

Vuex 存储

import { api } from '../../services/api'

export default {
  namespaced: true,
  state: {
    filters: null
  },
  getters: {
    filters: state => state.filters
  },
  mutations: {
    setStateValue: (state, {key, value}) => {
       state[key] = value
    }
  },
  actions: {
    getFilters: async (context) => {
      await api.get('/api/filters').then((response) => {
        context.commit('setStateValue', {
          key: 'filters',
          value: response.data
        })
      })
    }
  }
}

标签: javascriptvue.jsvuejs2vuex

解决方案


首先 - 如果您提供的 Vuex 代码是您的主要存储(不是模块的一部分),您应该删除namespaced: true,- 它仅用于 vuex 模块。

如果您提供的 Vuex 代码不是 Vuex 模块的一部分,您应该简单地以这种方式映射 getter:

computed: {
  ...mapGetters(['filters']),
},

更多信息 - https://vuex.vuejs.org/guide/modules.html#binding-helpers-with-namespace


推荐阅读