Vuejs2 如何从vuex中的子组件向任何父组件激发事件
因此,我将组件“X”作为父组件或组件“Y”作为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
父组件,“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>