Ich habe zwei Module in meinem Vuex-Shop.
var store = new Vuex.Store({
modules: {
loading: loading
posts: posts
}
});
Im Modul habe loading
ich eine Eigenschaft, saving
die entweder true
oder festgelegt werden kann, false
und eine Mutationsfunktion, die TOGGLE_SAVING
zum Festlegen dieser Eigenschaft benannt ist.
Im Modul posts
möchte ich vor und nach dem Abrufen von Posts die Eigenschaft ändern saving
. Ich mache es, indem ich commit('TOGGLE_SAVING')
von einer der Aktionen im posts
Modul aus aufrufe.
var getPosts = function (context) {
contex.commit(TOGGLE_LOADING);
};
Beim Versuch, ein Commit durchzuführen, wurde in der Konsole der folgende Fehler angezeigt
[vuex] unknown local mutation type: TOGGLE_LOADING, global type: posts/TOGGLE_LOADING
Wie kann ich den Status in einem anderen Modul mithilfe von ändern commit
?
commit
, wie hinzuzufügen, da diescommit('namespace/TOGGLE_SAVING', null, { root: true })
sonst nicht funktioniert.Mit der Aktion können Sie eine Mutation festschreiben, die in einem anderen Modul definiert wurde. Anschließend ändern Sie den Status in einem anderen Modul.
so was:
quelle
[vuex] unknown local mutation type: TOGGLE_LOADING, global type: posts/TOGGLE_LOADING
namespace: true
, muss ich das nächste tun:commit('my_module_name/someMutation', null, { root: true })
Sie können den Speicher auch wie gewohnt in eine beliebige js-Datei importieren und verwenden. Zum Beispiel:
Dies funktioniert ziemlich gut. Der einzige Nachteil ist, dass es schwierig sein kann, Tests oder Modelle zu isolieren.
Ausgabe : Vor kurzem habe ich den gesamten Code mit der Technik entfernt, die ich aufgrund der Testprobleme erwähnt habe. In der Tat können Sie den Status anderer Module wie in diesem Beispiel immer auf die empfohlene Weise ändern. Sehr nützlich, wenn Sie Authentifizierung und Profil in verschiedenen Modulen verwalten.
logout: context => { return new Promise((resolve) => { // Clear token in all axios requests axios.defaults.headers.common['Authorization'] = '' // Logout from firebase firebase .auth() .signOut() .then(() => { // Update state in profile module context.commit('profile/SET_USER', null, { root: true }) resolve() }) .catch(error => reject(error)) }) }
quelle