Vuejs2 在组件中找不到Vuex数据存储
我正在使用一个带有Vue、Vuetify、Vue路由器和Vuex的项目。其目的是在更模块化的方法中创建一个带有侧栏的基本布局,以便通过Vue实现可伸缩性。所以我创建了一个名为Store的文件夹,它有一个modules文件夹。因此,我在store文件夹中的索引文件如下所示:Vuejs2 在组件中找不到Vuex数据存储,vuejs2,vue-component,vuex,vuex-modules,Vuejs2,Vue Component,Vuex,Vuex Modules,我正在使用一个带有Vue、Vuetify、Vue路由器和Vuex的项目。其目的是在更模块化的方法中创建一个带有侧栏的基本布局,以便通过Vue实现可伸缩性。所以我创建了一个名为Store的文件夹,它有一个modules文件夹。因此,我在store文件夹中的索引文件如下所示: import Vue from 'vue'; import Vuex from 'vuex'; import global from './Modules/Global'; Vue.use(Vuex); export de
import Vue from 'vue';
import Vuex from 'vuex';
import global from './Modules/Global';
Vue.use(Vuex);
export default new Vuex.Store({
modules: {
site: global
}
});
该模块被分解为一个文件,其中包含操作、getter、突变和状态
const actions = {
sidebarState: ({ commit }, status) => {
commit('openOrCloseSidebar', status);
}
}
const mutations = {
openOrCloseMenu: (status) => {
if (status !== true)
return state.sidebar = true;
return state.sidebar = false;
}
};
const getters = {
};
const state = {
sidebar: true
};
export default {
namespaced: true,
actions,
mutations,
getters,
state
};
我调用Vue实例如下
import Vue from 'vue/dist/vue';
import Vuetify from 'vuetify';
import Axios from 'axios';
import application from './Template/Application.vue';
import router from './Router';
import store from './Store';
import { sync } from 'vuex-router-sync';
Vue.use(Vuetify);
Vue.use(router);
Vue.use(store);
sync(store, router);
var vue = new Vue({
el: '#application',
template: '<application></application>',
components: {
application
},
router: router,
store: store
});
我正在尝试访问我的状态并学习如何正确发射,因此在导航组件中,我可以向上发射,以便反映值以打开或关闭侧边栏
任何帮助都会非常好,我对Vue非常陌生。当您试图通过
this.$store
访问存储时,this
变量不会引用Vue实例
data
对象必须是返回对象的方法
data() {
return { menu: this.$store.state.site.sidebar };
}
但是,通过像这样从存储的状态
对象和数据
方法中检索值,您仅在Vue实例初始化时设置菜单
数据属性的值。菜单
的值不会随着商店的状态
中值的更改而更新
如果需要
菜单
值在Vue实例的整个生命周期内反映状态
对象,则需要使用计算属性或映射状态
,正如@Phil的回答中所建议的。当您试图通过this.$store
访问存储时,this
变量不引用Vue实例
data
对象必须是返回对象的方法
data() {
return { menu: this.$store.state.site.sidebar };
}
但是,通过像这样从存储的状态
对象和数据
方法中检索值,您仅在Vue实例初始化时设置菜单
数据属性的值。菜单
的值不会随着商店的状态
中值的更改而更新
如果需要
菜单
值在Vue实例的整个生命周期内反映状态
对象,则需要使用计算属性或映射状态
,正如@Phil的回答所建议的那样。我认为主要的问题是你的模块状态路径应该是这个。$store.state.site
方法是使用计算属性。比如说
computed: {
menu() {
return this.$store.state.site.sidebar
}
}
您也可以使用
我认为主要的问题是您的模块状态路径应该是
this.$store.state.site
方法是使用计算属性。比如说
computed: {
menu() {
return this.$store.state.site.sidebar
}
}
您也可以使用
好的,您需要将配置传递到main.js中的应用商店。也
Vue.use(Vuex)代码>应该在主菜单中。js@connexo我不是在使用调用它的Vue.use(store)
吗?好的,您需要将配置传递到main.js中的存储。也Vue.use(Vuex)代码>应该在主菜单中。js@connexo我不是在使用调用它的Vue.use(store)
吗?我想你需要访问这个.$store.state.site.sidebar
。查看我的最新答案。我感谢您的回答,您已经透露了一些信息。我认为您需要访问此。$store.state.site.sidebar
。看到我更新的答案。我很感激你的答案,你已经透露了一些信息。很好地理解了状态对象的路径。您的解决方案无疑是设置需要对vuex状态作出反应的计算属性的最佳实践。这似乎是OP想要做的(不清楚)。但是我认为,在某些情况下,知道可以使用data
方法中存储的值初始化数据属性是很有帮助的,因此我也将留下我的答案。您已经说明了一些问题,我感谢您的回答。我仍然有一个类似的问题,但我相信我理解它试图做什么。很好地捕捉到状态对象的路径。您的解决方案无疑是设置需要对vuex状态作出反应的计算属性的最佳实践。这似乎是OP想要做的(不清楚)。但是我认为,在某些情况下,知道可以使用data
方法中存储的值初始化数据属性是很有帮助的,因此我也将留下我的答案。您已经说明了一些问题,我感谢您的回答。我仍然有一个类似的问题,但我相信我理解它试图做什么。