Я создал модуль для захвата данных API и удержания его для компонента vue:
import Vue from 'vue';
export default {
namespaced: true,
state() {
return {
all: []
}
},
getters: {
all(state) {
return state.all;
}
},
mutations: {
all(state, data) {
Vue.set(state, 'all', data);
},
clear(state) {
Vue.set(state, 'all', []);
}
},
actions: {
async init({ commit, state }) {
let response = await this.axios.get('/api/v1/teams/', {
params: {
includes: 'users'
}
});
if (response.status === 200) {
let data = response.data.data.filter(function (element) {
return element.users.length > 0;
});
commit('userTeamSelect/all', data, {root: true});
} else {
Vue.toasted.error('Could not fetch team data', {
duration: 10000
});
}
}
}
}
У меня есть компонент, который динамически регистрирует модуль при его создании и удаляет модуль из хранилище перед его удалением:
created() {
if (this.$store.getters['userTeamSelect/all'] === undefined) {
this.$store.registerModule('userTeamSelect', UserTeamSelectModule);
this.$store.dispatch('userTeamSelect/init');
}
},
beforeDestroy() {
if (this.$store.getters['userTeamSelect/all'] !== undefined) {
this.$store.commit('userTeamSelect/clear');
this.$store.unregisterModule('userTeamSelect');
}
},
При переходе на страницу, где используется этот компонент, в консоли появляется следующее сообщение об ошибке: [vuex] unknown mutation type: userTeamSelect/all
Эта мутация вызывается только в рамках действия init модуля Dynami c, поэтому проблема должна быть где-то там. Я попытался назвать его как локально commit('all', data)
, так и глобально commit('userTeamSelect/all', data, {root:true})
, но безуспешно.
Модуль должен быть добавлен в хранилище vuex, потому что я могу вызвать действие без проблем. Просто кажется, что мутация не регистрируется как-то? Я ожидаю, что он будет работать нормально, или получит ошибку о неизвестном действии.
Может кто-нибудь указать мне правильное направление, пожалуйста?