Vuejs2 如何从vuex中的子组件向任何父组件激发事件

Vuejs2 如何从vuex中的子组件向任何父组件激发事件,vuejs2,vuex,Vuejs2,Vuex,因此,我将组件“X”作为父组件或组件“Y”作为 父组件,“a”作为子组件触发一个或多个事件 “a”或“a”本身的任何子兄弟姐妹或父级都可以使用该事件 我想使用“a”作为一个独立的组件 所以我有一个“X”分量,它有自己的 state mutations actions getters 我有自己的“a”组件 state mutations actions getters “a”a.vue文件如下所示 <template> <d

因此,我将组件“X”作为父组件或组件“Y”作为
父组件,“a”作为子组件触发一个或多个事件
“a”或“a”本身的任何子兄弟姐妹或父级都可以使用该事件
我想使用“a”作为一个独立的组件

所以我有一个“X”分量,它有自己的

   state
   mutations
   actions 
   getters
我有自己的“a”组件

state    
mutations    
actions     
getters
“a”a.vue文件如下所示

<template>
<div>
<app-select 
 @change.native="someevent()" 
 name="lineup_id" 
 v-model="$store.state.form.id" label="Select Id" 
:options="options"
 />
</div>
</template>
import AppSelect from "../AppSelect.vue";
export default {
  data() {
    return {
      options:[]
    };
  },
  components: {
    AppSelect,
  },
}

从“./AppSelect.vue”导入AppSelect;
导出默认值{
数据(){
返回{
选项:[]
};
},
组成部分:{
AppSelect,
},
}
所以我想从子级“a”触发更改事件
“X”和“Y”任何家长都可以获得该事件并对该事件进行处理

我知道如何使用VUE执行此操作,Fist:不要使用$state获取属性


从“./AppSelect.vue”导入AppSelect;
从“vuex”导入{mapState}
导出默认值{
计算:{
…映射状态(['explicitPropertyName'])
}
数据(){
返回{
选项:[]
};
},
组成部分:{
AppSelect,
},
}
Second:使用总线事件,请参见示例

Vue.config.productionTip=false
Vue.config.devtools=false
prototype.$eventBus=new Vue()
常量分量A={
模板:`Component A emit`,
方法:{
方法(){
this.$eventBus.$emit('EVENT_NAME_FROM_A',{id:12,伪:“Unicorn power A”});
}
},
挂载(){
此.$eventBus.$on('EVENT_NAME_FROM_B',函数(有效负载){
日志('从组件B发出,在组件A'中接收',有效载荷);
});
}
}
常量分量B={
模板:`Component B emit`,
方法:{
方法(){
this.$eventBus.$emit('EVENT_NAME_FROM_B',{id:12,伪:“Unicorn power”});
}
},
挂载(){
此.$eventBus.$on('EVENT_NAME_FROM_A',函数(有效负载){
日志('从组件A发出,在组件B'中接收',有效载荷);
});
}
}
const vm=新的Vue({
el:“应用程序”,
组成部分:{
成分a,
成分B
},
挂载(){
此.$eventBus.$on('EVENT_NAME_FROM_B',函数(有效负载){
log('从组件B发出,在父级中接收',有效载荷);
});
此.$eventBus.$on('EVENT_NAME_FROM_A',函数(有效负载){
log('从组件A发出,在父级中接收',有效载荷);
});
}
})

是的,这是VUE中的事件处理,也是使用事件总线的另一种方法。但是将事件总线和vuex状态管理结合起来可以吗?我正在试图找到最好的方式来做这个事件和状态管理…mapState(['explicitPropertyName'])这看起来是个好主意,谢谢
<template>
  <div>
    <app-select 
      @change.native="someevent()" 
      name="lineup_id" 
      v-model="explicitPropertyName" label="Select Id" 
      :options="options"
    />
  </div>
</template>
<script>
import AppSelect from "../AppSelect.vue";
import { mapState } from 'vuex'

export default {
  computed : {
      ...mapState(['explicitPropertyName'])
  }
  data() {
    return {
      options:[]
    };
  },
  components: {
    AppSelect,
  },
}
</script>