มีวิธีการส่งการกระทำระหว่างสองโมดูล vuex เนมสเปซหรือไม่?


159

เป็นไปได้หรือไม่ที่จะส่งการกระทำระหว่างโมดูลเนมสเปซ

เช่นฉันมีโมดูล "gameboard" และ "การแจ้งเตือน" ของโมดูล vuex แต่ละคนมีเนมสเปซ ฉันต้องการส่งการกระทำจาก gameboard ไปยังโมดูลการแจ้งเตือน

ฉันคิดว่าฉันสามารถใช้ชื่อโมดูลในชื่อการกระทำการจัดส่งเช่นนี้:

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

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

แต่เมื่อฉันพยายามทำสิ่งนี้ฉันได้รับข้อผิดพลาดที่ทำให้ฉันสิ่ง vuex พยายามส่งการกระทำภายในโมดูล gameboard ของฉัน:

[vuex] ประเภทการกระทำในท้องถิ่นที่ไม่รู้จัก: การแจ้งเตือน / ทริกเกอร์ SelfDismissing การแจ้งเตือน, ประเภททั่วโลก: เกมกระดาน / การแจ้งเตือน / ทริกเกอร์ SelfDismissing การแจ้งเตือน

มีวิธีการส่งจากโมดูล vuex ไปยังโมดูลหรือฉันจำเป็นต้องสร้างบริดจ์ในอินสแตนซ์รูท vuex หรือไม่?

คำตอบ:


345

คุณเพียงแค่ต้องระบุว่าคุณกำลังส่งจากบริบทรูท:

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

ตอนนี้เมื่อการแจกจ่ายไปถึงรูทจะมีเนมสเปซพา ธ ที่ถูกต้องไปยังโมดูลการแจ้งเตือน (สัมพันธ์กับอินสแตนซ์รูท)

นี่คือสมมติว่าคุณกำลังตั้งค่าnamespaced: trueในโมดูลร้านค้า vuex ของคุณ


39
นี่เป็นสิ่งเดียวที่บนอินเทอร์เน็ตสำหรับการค้นหาโซลูชันของฉัน ขอบคุณสำหรับคำตอบ.
Peter Roehlen

9
เพื่อความเป็นธรรมมีการบันทึกไว้ที่นี่vuex.vuejs.org/en/modules.htmlที่ "การเข้าถึงสินทรัพย์ทั่วโลกในโมดูลเนมสเปซ" แม้ว่ามันจะเป็นชนิดของที่น่าอึดอัดใจที่จะใช้ใน.
เจค

2
ฉันชอบ vue แต่สำหรับฉันแล้ว vuex เพิ่มความยากให้มากกว่าที่จะทำให้ง่ายขึ้น ตอนนี้ฉันรู้ว่านี่ไม่ใช่จุดประสงค์ของการ vuex แต่ยังคงไม่ได้น่ารำคาญที่ผมมักจะต้องตระหนักถึงการประชุมของบางอย่างเช่นในตัวอย่างนี้notification/triggerแล้วถ้าฉันต้องการให้เป็นนิด ๆ หน่อย ๆ ทั่วไปมากขึ้นฉันจะ${NOTIF_TYPE_NAME}/${NOTIF_TRIGGER_ACTION}ยังคง ต้องการสแลชหรือสร้างฟังก์ชั่นตัวช่วยสำหรับสิ่งนี้ฉันรู้สึกว่าเมื่อฉันต้องการให้แอพของฉันเป็นแบบแยกส่วนฉันจ่ายมากกว่าที่ฉันได้รับ นี่คือความคิดเห็นของฉัน
Dima Gimburg

11
this.dispatchคุณสามารถใช้ {root: true}มันไม่จำเป็นต้อง นี่คือทั่วโลก
MKatleast3

6
{root: true}คุณไม่จำเป็นต้องใช้ กรณีที่คุณตั้งใจจะส่งไปยังโมดูลลูกซึ่งแน่นอน (และแน่นอน) ไม่จำเป็นต้องมีธงนี้
kursus

0

ในฐานะ mencioned @ MKatleast3

this.dispatchคุณสามารถใช้ ไม่ต้องการ{root: true}ตัวเลือกในการจัดส่ง นี่คือทั่วโลก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.