네임 스페이스가 지정된 두 개의 vuex 모듈간에 작업을 전달하는 방법이 있습니까?


159

네임 스페이스 모듈간에 작업을 전달할 수 있습니까?

예를 들어, vuex 모듈 "gameboard"및 "notification"이 있습니다. 각각은 네임 스페이스입니다. 게임 보드에서 알림 모듈로 액션을 전달하고 싶습니다.

다음과 같이 디스패치 작업 이름에 모듈 이름을 사용할 수 있다고 생각했습니다.

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

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

그러나이 작업을 시도 할 때 vuex가 내 게임 보드 모듈 내에서 액션을 전달하려고하는 오류가 발생합니다.

[vuex] 알 수없는 로컬 액션 유형 : notification / triggerSelfDismissingNotification, 글로벌 유형 : 게임 보드 / 알림 / triggerSelfDismissingNotification

vuex 모듈에서 모듈로 디스패치하는 방법이 있습니까? 아니면 루트 vuex 인스턴스에 일종의 브리지를 만들어야합니까?

답변:


343

루트 컨텍스트에서 디스패치하도록 지정하면됩니다.

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

이제 디스패치가 루트에 도달하면 알림 모듈에 대한 올바른 네임 스페이스 경로를 갖게됩니다 (루트 인스턴스와 관련됨).

이것은 namespaced: truevuex 상점 모듈에서 설정한다고 가정합니다 .


39
이것은 해결책을 찾기 위해 인터넷에서 유일하게 히트 한 것입니다. 대답 해줘서 고마워.
피터 Roehlen

8
공정하게하기 위해 여기 " vuspace.vuejs.org/en/modules.html "네임 스페이스 모듈의 글로벌 자산 액세스 "에 문서화되어 있습니다 . 받아들이
Jake

2
나는 vue를 좋아하지만 vuex는 더 단순하게 만드는 것보다 더 많은 난이도를 추가하는 것 같습니다. 지금은이 vuex의 목적 아니라는 것을 알고 있지만 여전히, 난 항상이 예에서는 같은 몇 가지 규칙을 알고 있어야한다는 것이 성가신되지 않습니다 notification/trigger내가 그것을 조금 더 일반적인 내가되고 싶은 다음 경우, ${NOTIF_TYPE_NAME}/${NOTIF_TRIGGER_ACTION}여전히, 슬래시가 필요하거나 심지어 이것에 대한 도우미 기능을 만들려면 앱이 더 모듈화되기를 원할 때 얻는 것보다 많은 비용을 지불한다고 생각합니다. 이것은 제 생각입니다
디마 Gimburg

11
사용할 수 있습니다 this.dispatch. 필요하지 않습니다 {root: true}. 이것은 세계적입니다.
MKatleast3

6
아니 당신은 사용해야 {root: true}합니다. 당신이 의미하는 경우는 아마도 자식 모듈에 디스패치하는 것입니다.이 모듈은 실제로이 플래그가 필요하지 않습니다.
kursus

0

@ MKatleast3을 mencioned로

사용할 수 있습니다 this.dispatch. {root: true}디스패치 옵션 에는 필요하지 않습니다 . 이것은 세계적입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.