vuex:为什么在命名空间模块中调用变异需要前缀?

时间:2017-10-13 21:48:45

标签: vue.js vuex

我有以下vuex配置

import listing from '@/store/modules/listing'
var store = new Vuex.Store({
    modules:
    {
        listing: listing,

    },

,列表模块代码如下所示

import Vue from 'vue'
const listing = {
    namespaced: true,
    state: {
        listingAllItems: [],
        listingSelectedItems: [],       
    },
    mutations: {
        updateListingAllItems(state, param) {
        },
    },
    actions: {
        getListingItems(context, param) {
            var tempThis = this;
            return new Promise((resolve, reject) => {
                var url = 'http://WS/';
                Vue.http.get(url).then(response => {
                    tempThis.commit('updateListingAllItems', response.data);
                }).catch(error => reject(error));
            })
        },
    },
    getters: {}
}

export default listing

调用 this.commit('updateListingAllItems',response.data)我收到 [vuex]未知突变类型:updateListingAllItems

vuex guide

  

命名空间的getter和操作将接收本地化的getter,   派遣和提交。换句话说,您可以使用模块资产   无需在同一模块中写入前缀

为什么我收到错误消息?

1 个答案:

答案 0 :(得分:0)

操作方法this内部是商店。您的代码在商店实例上提交了一个非前缀的变异。

如果你改变了

tempThis.commit('updateListingAllItems', response.data);

context.commit('updateListingAllItems', response.data);

你会得到你所期望的。