İki ad boşluklu vuex modülü arasında eylem göndermenin bir yolu var mı?


159

Ad boşluklu modüller arasında bir eylem göndermek mümkün müdür?

Örneğin vuex modülleri "gameboard" ve "bildirim" var. Her biri ad boşlukludur. Oyun tahtasından bildirim modülüne bir eylem göndermek istiyorum.

Ben böyle bir gönderme eylem adında modül adını kullanabileceğini düşündüm:

// store/modules/gameboard.js
const actions = {
    myaction ({dispatch}) {
        ...
        dispatch('notification/triggerSelfDismissingNotifcation', {...})
    }
}

// store/modules/notification.js
const actions = {
    triggerSelfDismissingNotification (context, payload) {
        ...
    }
}

Ama bunu yapmaya çalıştığımda vuex'in oyun tahtası modülümde bir eylem göndermeye çalıştığı bir şey yapan hatalar alıyorum:

[vuex] bilinmeyen yerel eylem türü: bildirim / tetikleyiciKendisiÖğrenme Bildirimi, genel tür: oyun tahtası / bildirim / tetikleyiciKendisiÖzellik BildirimiBildirimi

Vuex modülünden modüle göndermenin bir yolu var mı veya kök vuex örneğinde bir tür köprü oluşturmam gerekiyor mu?

Yanıtlar:


345

Sadece kök bağlamdan gönderim yaptığınızı belirtmeniz gerekir:

// from the gameboard.js vuex module
dispatch('notification/triggerSelfDismissingNotifcation', {...}, {root:true})

Artık dağıtım köke ulaştığında, bildirimler modülüne (kök örneğine göre) doğru ad alanı yoluna sahip olacaktır.

Bu, namespaced: truevuex mağaza modülünüzde ayarladığınızı varsayar .


39
Bu, bir çözüm arayışım için internetteki tek hit. Cevapladığınız için teşekkürler.
Peter Roehlen

9
Adil olmak gerekirse , burada vuex.vuejs.org/en/modules.html " Adlandırılmış Modüllerde Global Varlıklara Erişim" bölümünde belgelenmiştir . Rağmen içeri almak garip.
Jake

2
Vue'yu seviyorum, ama bana öyle geliyor ki vuex basitleştirmek yerine daha fazla zorluk katmanı ekliyor. Şimdi bu vuex amacı olmadığını biliyorum ama yine de, ben her zaman bu örnekte olduğu gibi, bazı sözleşmeler farkında olması gerektiğini sinir bozucu değil notification/triggerben bunu biraz daha genel yapmak olmak istiyorum o zaman bile, ${NOTIF_TYPE_NAME}/${NOTIF_TRIGGER_ACTION}hala, eğik çizgiye ihtiyacım var, hatta bunun için bir yardımcı işlev oluşturduğumda, Uygulamamın daha modüler olmasını istediğimde, aldığımdan çok daha fazla ödeme yaptığımı hissediyorum. Bu benim görüşüm
Dima Gimburg

11
Kullanabilirsiniz this.dispatch. Gerek yok {root: true}. Bu küresel.
MKatleast3

6
Hayır kullanmak zorundasın {root: true}. Demek istediğiniz durum, muhtemelen (ve belli ki) bu bayrağa ihtiyaç duymayan bir alt modüle gönderiyor.
kursus

0

Mencioned @ MKatleast3 olarak

Kullanabilirsiniz this.dispatch. {root: true}Dağıtım seçeneklerinde olması gerekmez . Bu küresel.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.