简单的说:解决了事件的定义和事件的执行
解决了:把事件的定义和事件的执行进行分离,实现了逻辑的解耦
实际也解决了子组件给父组件传值
$on 定义
$emit 执行
源代码:
<template>
<div class="test">
<el-button @click="boost">触发事件</el-button>
</div>
</template>
<script>
export default {
created(){
//参数:(事件的名称,事件的处理方法)
this.$on("my_events",this.handleEvents)
},
methods:{
handleEvents(e){
console.log(11111,e)
},
boost(){
this.$emit('my_events','my params');
}
}
}
</script>
调用关系:
运行效果:
前面111是console.log写死的内容,后面my_events是传递的参数内容
解答问题:
1)可不可以同一个事件调用两个方法
答:可以
created(){
//事件的名称,事件的处理方法
this.$on("my_events",this.handleEvents)
this.$on("my_events",this.handleEvents2)
},
methods:{
handleEvents(e){
console.log(11111,e)
},
handleEvents2(e){
console.log(2222,e)
},
boost(){
this.$emit('my_events','my params');
}
}
注意:我们先定义的事件会先触发
2)可不可以不同的事件触发一个方法?
答:可以
created(){
//事件的名称,事件的处理方法
this.$on(["my_events","my_events2"],this.handleEvents)
},
methods:{
handleEvents(e){
console.log(11111,e)
},
boost(){
this.$emit('my_events2','my params');
}
}
3)我是如何知道他们是否可以这样操作的?
答:看文档,或者看源码
如何看源码呢?就是打断点(debugger)
从源码上你可以看出,他是判断了是否是数组