事件绑定 $emit 和 $on

2,064 阅读1分钟

简单的说:解决了事件的定义和事件的执行

解决了:把事件的定义和事件的执行进行分离,实现了逻辑的解耦

实际也解决了子组件给父组件传值

$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)

从源码上你可以看出,他是判断了是否是数组