Чи існує спосіб відправки дій між двома модулями vuex, розміщеними з іменами?


159

Чи можливо відправити дію між модулями, розміщеними на імена?

Наприклад, у мене є модулі vuex "ігровий щит" та "сповіщення". Кожен розділений на імена. Я хотів би відправити дію з ігрового поля на модуль сповіщення.

Я думав, що можу використати ім'я модуля у назві дії диспетчера, як це:

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

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

Але коли я намагаюся це зробити, я отримую помилки, які змушують мене, що Vuex намагається відправити дію в моєму модулі ігрової панелі:

[vuex] невідомий локальний тип дії: сповіщення / тригерSelfDismissingNotification, глобальний тип: ігровий щит / сповіщення / тригерSelfDismissingNotification

Чи є спосіб відправки від модуля vuex до модуля чи мені потрібно створити якийсь міст в кореневому екземплярі vuex?

Відповіді:


343

Вам просто потрібно вказати, що ви відправляєте з кореневого контексту:

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

Тепер, коли відправка досягне кореня, вона матиме правильний шлях простору імен до модуля сповіщень (щодо кореневого екземпляра).

Це припущення, що ви встановлюєте namespaced: trueмодуль магазину vuex.


39
Це єдине звернення в Інтернеті для мого пошуку рішення. Дякую за відповідь.
Пітер Рулен

8
Справедливості, це задокументовано тут vuex.vuejs.org/en/modules.html у розділі "Доступ до глобальних активів у модулях, розміщених у імені". Хоча брати участь незручно.
Джейк

2
Я люблю vue, але мені здається, що vuex додає більше шарів складності, а не робить його простішим. Тепер я знаю, що це не мета vuex, але все-таки, чи не дратує те, що мені завжди потрібно знати про деякі умови, як у цьому прикладі notification/trigger, тоді, якщо я хочу, щоб це було трохи більш загальним, я ${NOTIF_TYPE_NAME}/${NOTIF_TRIGGER_ACTION}все-таки мені потрібна косою рисою або навіть створити функцію помічника для цього, я відчуваю, що коли я хочу, щоб мій додаток був більш модульним, я плачу набагато більше, ніж отримую. Це моя думка
Діма Гімбург

11
Можна використовувати this.dispatch. Це не потрібно {root: true}. Це глобально.
MKatleast3

6
Ні, вам не доведеться користуватися {root: true}. Справа, яку ви мали на увазі, ймовірно, відправляється до дочірнього модуля, який справді (і очевидно) не потребує цього прапора.
курсус

0

Як задумав @ MKatleast3

Можна використовувати this.dispatch. Це не потрібно {root: true}в опціях відправки. Це глобально.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.