私は次のモジュールを持っています:
_export const ProfileData = {
state: {
ajaxData: null;
},
getters: {/*getters here*/},
mutations: {/*mutations here*/},
actions: {/*actions here*/}
}
_
このモジュールは私のグローバルストアに登録されています:
_import {ProfileData} from './store/modules/ProfileData.es6'
const store = new Vuex.Store({
modules: {
ProfileData: ProfileData
}
});
_
また、Vue.use(Vuex)
を使用して、ストアをnew Vue({ store: store})
に適切に設定しました。ただし、ajaxData
モジュールに属するProfileData
にアクセスしようとすると、コンポーネントの1つで_this.$store.ProfileData.ajaxData
_を介して、コンソールにundefined
エラーが表示されます。 _this.$store.ProfileData
_または_this.$store.ajaxData
_の読み取りについても同じことが言えますが、_this.$store
_が定義されており、すでに読み取ることができます。また、ブラウザのコンソールのストアの__modules
_プロパティにProfileData
オブジェクトが追加されているのがわかります。
Vuex
に登録されているモジュールにアクセスするのに間違っているのは何ですか?どうすればそれらにアクセスできますか?
モジュールのローカル状態 にアクセスするための形式は$store.state.moduleName.propertyFromState
です。
したがって、次を使用します。
this.$store.state.ProfileData.ajaxData
デモ:
const ProfileData = {
state: {ajaxData: "foo"}
}
const store = new Vuex.Store({
strict: true,
modules: {
ProfileData
}
});
new Vue({
store,
el: '#app',
mounted: function() {
console.log(this.$store.state.ProfileData.ajaxData)
}
})
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
<script src="https://unpkg.com/vuex"></script>
<div id="app">
<p>ajaxData: {{ $store.state.ProfileData.ajaxData }}</p>
</div>
名前空間が設定されているかどうかによって異なります。デモを参照してください(コメントの説明):
const ProfileDataWithoutNamespace = {
state: {ajaxData1: "foo1"},
getters: {getterFromProfileDataWithoutNamespace: (state) => state.ajaxData1}
}
const ProfileDataWithNamespace = {
namespaced: true,
state: {ajaxData2: "foo2"},
getters: {getterFromProfileDataWithNamespace: (state) => state.ajaxData2}
}
const store = new Vuex.Store({
strict: true,
modules: {
ProfileDataWithoutNamespace,
ProfileDataWithNamespace
}
});
new Vue({
store,
el: '#app',
mounted: function() {
// state is always per module
console.log(this.$store.state.ProfileDataWithoutNamespace.ajaxData1)
console.log(this.$store.state.ProfileDataWithNamespace.ajaxData2)
// getters, actions and mutations depends if namespace is true or not
// if namespace is absent or false, they are added with their original name
console.log(this.$store.getters['getterFromProfileDataWithoutNamespace'])
// if namespace is true, they are added with Namespace/ prefix
console.log(this.$store.getters['ProfileDataWithNamespace/getterFromProfileDataWithNamespace'])
}
})
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
<script src="https://unpkg.com/vuex"></script>
<div id="app">
<p>Check the console.</p>
</div>
Key:valueを使用してモジュールを追加したようですが、モジュールにアクセスするためのキーはProfileです。それを使用してモジュールを呼び出すか、Profileキーを使用せずにモジュール設定を直接定義してみてください。
modules: {
ProfileData
}