Vuex

2017-03-05 49 views
5

'daki bir modülden başka bir modül durumunu değiştirin. Vuex mağazamda iki modül var. modül loading yılında Vuex

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

, ben de true veya false set ve aynı zamanda bir mutasyon fonksiyonu bu özelliği ayarlamak için TOGGLE_SAVING adında var edilebilen bir özellik saving var.

posts modülünde, iletileri getirmeden önce ve sonra, saving özelliğini değiştirmek istiyorum. posts modülündeki eylemlerden birini kullanarak commit('TOGGLE_SAVING') numaralı telefonu arayarak yapıyorum. o işlemeye çalıştığımızda

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

, ben

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

nasıl commit kullanarak başka modülde devlet mutasyona olabilir konsolda hata aşağıdaki var?

cevap

4

here önerildiği gibi parametreler aşağıdaki deneyin;

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

namespaced değerini true olarak ayarlamanız gerekebilir.

+0

Awesome. Bu harika çalışıyor. Teşekkürler –

+1

Modüller ve ad alanlarını kullanıyorsanız, ad alanını 'commit', 'commit' ('namespace/TOGGLE_SAVING', null, {root: true}) 'gibi eklemeyi unutmayın. iş. – brainbag

1

, başka bir modülde tanımlanan mutasyona geçmek için action'u kullanabilir, ardından başka bir modülde durumu değiştirirsiniz. Böyle

:

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

Tam olarak böyle yaptım. Her iki modülden de "namespace: true" yazdım. Ama ben [vuex] bilinmeyen yerel mutasyon türü alıyorum: TOGGLE_LOADING, global type: posts/TOGGLE_LOADING' –

+1

oh yes.by varsayılan, eylemler, mutasyonlar ve modüller içindeki alıcılar hala genel ad alanı altında kayıtlı. Eğer ad alanı kaldırabilirsiniz özelliği veya commit ('someMutation', null, {root: true}) kullanın – Julien