Vue.js 从vuex操作访问$root实例
我有一个加载程序组件,它将根据Vue.js 从vuex操作访问$root实例,vue.js,vuex,Vue.js,Vuex,我有一个加载程序组件,它将根据 created() { this.$root.$on('show-loading', (vars) => { this.loading = vars; console.log('loader executed'); }); }, 当前,我可以通过this.$root.$emit('show-load',true)从vue组件执行显示加载 但是,我现在正在尝试从vuex模块文件执行代码。我犯了一个错误 Type
created() {
this.$root.$on('show-loading', (vars) => {
this.loading = vars;
console.log('loader executed');
});
},
当前,我可以通过this.$root.$emit('show-load',true)从vue组件执行显示加载
代码>
但是,我现在正在尝试从vuex模块文件执行代码。我犯了一个错误
TypeError:“\u此.$root未定义”
有人知道从vuex访问根实例的正确方法吗?不要将事件处理程序放在vuex存储中。他们不属于那里,也永远不会像预期的那样工作。在存储中有getter(从存储中获取值的方法)、transformation(同步设置器)、actions(异步设置器)和state(数据)
侦听器属于Vue实例,例如组件。除此之外,我还建议避免像瘟疫一样使用this.$root
和this.$parent
。在代码中包含这些内容通常意味着您在实际组件文件之外更改组件,这会导致神奇的行为,即在您不希望更改的地方更改内容
在您的情况下,您想做的事情可以更容易地通过单个存储突变或操作来完成
在您的商店中创建一个突变
const突变={
显示加载(状态、数据){
state.loading=数据;
}
};
现在,在您的组件中只需使用this.$store.commit('showLoading',true)代码>。不需要事件总线。没有在根组件中神奇地出现的事件。只有一个同步设置器
如果需要全局事件处理,可以使用总线
const$bus=new Vue();
Vue.prototype.$bus=$bus;
在组件中,您可以使用this.$bus.$on(…)
侦听事件,或使用this.$bus.$emit(…)
发出事件。如果您需要完全在Vue之外进行操作,可以使用以下模式在组件之外创建事件侦听器
$bus.$on('show-load',(vars)=>{
//做点什么
});
从技术上讲,它甚至允许您使用导入存储从“../path/to/store”
和store.commit(…)
加载存储。如果事件旨在在根目录中设置变量,您可以使用Vuex状态,并从根组件绑定到它。这将使根与Vuex模块解耦。哦,很抱歉,我没有包括,但没有。事件没有设置根变量<代码>此。加载
是组件级数据。您仍然可以使用Vuex状态进行加载。谢谢您,先生。我会尝试一下你的方法,并给你我的反馈