Vue-封装-$on $emit $off(封装事件订阅)

vue封装 $on、$emit、$off

1.$on 事件的订阅

1

2

3

4

5

6

7

8

9

10

11

$on(eventName,callback)  参数1:事件名称  参数2:事件函数

判断当前事件名称是否存在,如果不存在则创建一个key值为事件名称

value为一个数组 将callback push到数组中

 

const eventList = {};

const $on = (eventName,callback)=>{

     if(!eventList[eventName]){

         eventList[eventName] = [];

     }

     eventList[eventName].push(callback)

}

2.$emit 事件的触发

1

2

3

4

5

6

7

8

9

10

11

12

$emit(eventName,[params]) 参数1:事件名称 参数2:[需要传递的参数]

判断当前事件的名称是否存在,如果存在则遍历数组,得到所有的函数,并执行。然后将params当做实参传递到函数中去

 

const eventList = {};

const $emit = (eventName,params)=>{

    if(eventList[eventName]){

         let arr = eventList[eventName];

         arr.map((cb)=>{

             cb(params)

         })

    }

}

3.$off 事件的解绑

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

$off(eventName,[callback])  参数1:事件名称  参数2:[事件函数]

判断当前事件名称是否存在,如果存在继续判断第二个参数是否存在,如果存在则找到相对应的下标 然后将函数在数组中移除

如果不存在则将整个数组清空

 

const eventList = {};

const $off = (eventName,callback)=>{

    if(eventList[eventName]){

          if(callback){

                 let index = eventList[eventName].indexOf(callback);

                 eventList[eventName].splice(index,1)

           }

    }else{

           eventList[eventName].length = 0; 

    }

}

 

export default = {

     $on,

     $emit,

     $off

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值