Có cách nào để gửi hành động giữa hai mô-đun vuex được đặt tên không?


159

Có thể gửi một hành động giữa các mô-đun không gian tên?

Ví dụ: tôi có các mô-đun vuex "gameboard" và "thông báo". Mỗi cái được đặt tên. Tôi muốn gửi một hành động từ bảng trò chơi đến mô-đun thông báo.

Tôi nghĩ rằng tôi có thể sử dụng tên mô-đun trong tên hành động công văn như thế này:

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

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

Nhưng khi tôi cố gắng thực hiện điều này, tôi gặp phải lỗi khiến tôi thấy vuex đang cố gắng gửi một hành động trong mô-đun bảng trò chơi của mình:

[vuex] loại hành động cục bộ không xác định: thông báo / triggerSelfDismissingNotification, loại toàn cầu: gameboard / thông báo / triggerSelfDismissingNotification

Có cách nào để chuyển từ mô đun vuex sang mô đun hay tôi cần tạo một loại cầu nào đó trong ví dụ vuex gốc?

Câu trả lời:


343

Bạn chỉ cần xác định rằng bạn đang gửi từ bối cảnh gốc:

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

Bây giờ khi công văn đến thư mục gốc, nó sẽ có đường dẫn không gian tên chính xác đến mô đun thông báo (liên quan đến thể hiện gốc).

Điều này giả sử bạn đang cài đặt namespaced: truetrên mô-đun cửa hàng vuex của mình.


39
Đây là lần truy cập duy nhất trên internet để tôi tìm kiếm giải pháp. Cảm ơn đã trả lời.
Peter Roehlen

8
Công bằng mà nói, nó được ghi lại ở đây vuex.vuejs.org/en/modules.html tại "Truy cập tài sản toàn cầu trong các mô-đun không gian tên". Mặc dù việc này rất khó xử.
Jake

2
Tôi yêu vue, nhưng dường như vuex thêm nhiều lớp khó khăn hơn là làm cho nó đơn giản hơn. Bây giờ tôi biết rằng đây không phải là mục đích của vuex nhưng vẫn không gây khó chịu khi tôi luôn cần phải biết một số quy ước như trong ví dụ này notification/trigger, sau đó nếu tôi muốn nó chung chung hơn một chút thì tôi ${NOTIF_TYPE_NAME}/${NOTIF_TRIGGER_ACTION}vẫn làm cần dấu gạch chéo, hoặc thậm chí tạo chức năng trợ giúp cho việc này, tôi cảm thấy rằng khi tôi muốn Ứng dụng của mình có tính mô đun hơn, tôi sẽ trả nhiều hơn số tiền tôi nhận được. Đây là ý kiến ​​của tôi
Dima Gimburg

11
Bạn có thể sử dụng this.dispatch. Nó không cần {root: true}. Đây là toàn cầu.
MKatleast3

6
Không có bạn phải sử dụng {root: true}. Trường hợp bạn muốn nói có lẽ là gửi đến một mô-đun con, mà thực sự (và rõ ràng) không cần cờ này.
kursus

0

Như đã bắt đầu @ MKatleast3

Bạn có thể sử dụng this.dispatch. Nó không cần {root: true}trong các tùy chọn công văn. Đây là toàn cầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.