Vue事件派发
vue实例上与事件派发相关的4个方法,分别为:
- $on:监听事件
- $off:移除监听事件
- $emit:触发事件
- $once:监听事件,只监听1次
首先总体介绍下这四个方法实现的基本原理:
1、vue实例上会创建一个对象来保存所有要监听的事件:vm._events = {}
2、每当我们要监听一个事件,就往vm._events里添加一个键值对,事件的名称作为键,一个空数组作为值。例如我们要监听的事件名称为event1
,则vm._events = {event1: []}
3、监听事件的回调函数都会添加到对应的数组中,例如我们调用
vm.$on('event1', cb2);
vm.$on('event1', cb3);
则此时vm._events={event1: [cb1, cb2, cb3]}
4、当我们执行$emit
触发对应事件时,所做的操作就是把该事件对应数组里的回调函数都拿出来执行一遍,例如当我们调用
5、$once
表示该事件只会触发执行一次,后面在触发就没用了,例如当我们调用:
// 用$on方法监听event2,回调函数为cb4
vm.$on('event2', cb4);
// 用$once方法监听event2,回调函数为cb5
vm.$once('event2', cb5);
// 触发event2事件,会执行cb4和cb5
vm.$emit('event2');
// 再次触发event2事件,这里只会执行cb4,不会执行cb5,cb5只会执行一次
vm.$emit('event2');
事件派发的主要应用场景
组件之间的通信:
子传父:
- 子:子组件标签上绑定@click = '回调函数',在回调函数中使用(事件触发$emit)this.$emit('自定义事件名称p', 数据)
- 父:(事件监听$on )v-on:p=‘回调函数’ , 在 methods: { 回调函数() { //逻辑处理 } }
兄弟通信:
- 通过中转站 event-bus.js
- A:methods :{ 函数{bus.$emit(‘自定义事件名’,数据)} 触发事件,发送
- B:created (){bus.$on(‘A发送过来的自定义事件名’,函数)} 对事件监听,进行数据接受
阅读剩余
版权声明:
作者:chun
链接:https://chun53.top/950.html
文章版权归作者所有,未经允许请勿转载。
THE END