2017-01-24 2 views
2

Ich versuche, Vuex anstatt meines selbstgewählten Ladenobjekts zu verwenden, und ich muss sagen, dass ich die Dokumente nicht so klar finde wie anderswo in der Vue.js-Welt. Nehmen wir an, ich habe ein Vuex-Modul namens 'products' mit eigenem Status, Mutationen, Gettern usw. Wie referenziere ich eine Aktion in diesem Modul, z. B. 'clearWorking Data'? Die Dokumente geben dieses Beispiel eines Moduls Zustand des Zugriffs:Wie Guter und Mutationen des Vuex Moduls zugreifen?

store.state.a // -> moduleA's state

Aber nichts, was ich Getter sehen kann, Mutationen, Aktionen usw.

Antwort

3

In Ihrem Beispiel wäre es store.dispatch('products/clearWorkingData'), um Sie über Aktionen denken/Mutationen als Dateisystem in gewisser Weise. Je tiefer die Module sind, desto tiefer sind sie im Baum verankert.

so könnten Sie store.commit('first/second/third/method') gehen, wenn Sie einen Baum hatten, der drei Ebenen tief war.

+0

Ah, OK! Ist das abhängig von der Einstellung 'namespaced: true'? –

+0

@JohnMoore Ja, tut mir leid, wenn ich es nicht erwähne, jedes Modul, das Sie getrennt haben möchten, muss 'namespaced: true,' gesetzt haben. Wenn nicht, erbt es den Namespace des Elternmoduls. –

+0

Du hast meinen Tag gerettet! – Marketingexpert

10

Zusätzlich zu der akzeptierten Antwort möchte ich Ihnen ein Workarround für den Getter bereitstellen, der in der Antwort fehlt.

Debug zum Shop
In jedem Fall, dass Sie console.log(this.$store) anrufen Store zu debuggen.
Wenn Sie dies tun, werden die Getter mit dem Namespace in ihrem Namen vorangestellt. enter image description here

Zugang Namespace Getter
this.$store.getters['yourModuleName/someGetterMethod']

Versand Namespace
this.$store.dispatch('yourModuleName/doSomething')

Fazit
Der Schlüssel ist, den Namensraum wie ein Dateisystem zu handhaben wie Justin erklärt.

+0

Also, wo ich 'return store.getters.individuals' verwendet habe, bevor ich namespaced = true hinzugefügt habe, muss ich' return store.getters ['individual/individuals'] '' Danke für diese zusätzliche Antwort verwenden. Habe eine halbe Stunde damit verbracht und null Beispiele für den Zugriff auf den namespaced getter gefunden, bis deine Antwort hier ist. – shanemgrey

+0

Der Grund für die Änderung sollte für mich offensichtlich gewesen sein. Sie können die Punktnotation für eine Eigenschaft mit einem Namen, der Sonderzeichen wie '/' enthält, nicht verwenden. Daher müssen Sie die Klammernotation verwenden. könnte in allen Fällen Bracket-Notation verwenden, es ist einfach nicht so elegant. Daher wird oft Punktnotation verwendet, es sei denn, es kann nicht wie in diesem Beispiel sein. – shanemgrey

+0

Vergessen Sie nicht, ['namespaced: true'] (https://vuex.vuejs.org/en/modules.html#namespacing) in jedem Modul zu setzen, um Getter wie diese verwenden zu können. – Scofield