2017-03-05 5 views
5

Ich habe zwei Module in meinem vuex Speicher.Ändern Sie einen anderen Modulstatus von einem Modul in Vuex

var store = new Vuex.Store({ 
    modules: { 
     loading: loading 
     posts: posts 
    } 
}); 

Im Modul loading habe ich eine Eigenschaft saving, die entweder true oder false eingestellt werden kann, und haben auch eine Mutation Funktion TOGGLE_SAVING namens diese Eigenschaft einzustellen.

Im Modul posts, vor und nach dem Holen von Beiträgen, möchte ich die Eigenschaft saving ändern. Ich tue es, indem ich commit('TOGGLE_SAVING') von einer der Aktionen im posts Modul nenne.

var getPosts = function (context) { 
    contex.commit(TOGGLE_LOADING); 
}; 

Wenn es versucht, zu begehen, ich habe folgende Fehler in der Konsole

[vuex] unknown local mutation type: TOGGLE_LOADING, global type: posts/TOGGLE_LOADING 

Wie kann ich Zustand in einem anderen Modul mit commit mutieren?

Antwort

4

Probieren Sie es mit den Parametern folgenden als here vorgeschlagen;

commit('TOGGLE_SAVING', null, { root: true }) 

Möglicherweise müssen Sie namespaced als wahr festlegen.

+0

Ehrfürchtig. Das funktioniert großartig. Danke –

+1

Wenn Sie Module und Namespaces verwenden, vergessen Sie nicht, den Namespace zum 'commit' hinzuzufügen, wie' commit ('namespace/TOGGLE_SAVING', null, {root: true}) 'oder sonst wird es nicht Arbeit. – brainbag

1

können Sie action verwenden, um eine Mutation zu begehen, die in einem anderen Modul definiert wurde, dann ändern Sie den Status in einem anderen Modul.

wie folgt aus:

posts: { 
    actions: { 
    toggleSavingActions(context) { 
     // some actions 
     context.commit("TOGGLE_SAVING"); // defined in loading module 
    } 
    } 
} 
+0

Genau so habe ich es gemacht. Ich habe auch "namespace: true" in beiden Modulen gesetzt. Aber ich bekomme '[vuex] unbekannter lokaler Mutationstyp: TOGGLE_LOADING, globaler Typ: posts/TOGGLE_LOADING' –

+1

oh ja. Standardmäßig sind Aktionen, Mutationen und Getter innerhalb von Modulen noch unter dem globalen Namespace registriert. So können Sie Namespace entweder entfernen Eigenschaft, oder verwenden Sie commit ('someMutation', null, {root: true}) – Julien

Verwandte Themen