vue中的on和emit

在vue中,使用on和emit可以实现父子组件传值,利用on和emit还可以实现事件的多重绑定

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <div id="root">
    <button @click="boost">按钮</button>
  </div>
</head>
<body>
  <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
  <script>
    new Vue({
      el: '#root',
      data(){
        return {
          message: 'hello vue'
        }
      },
      created(){
        this.$on('my_events', this.handleEvents)
      },
      methods:{
        boost(){
          // emit的意思,发射
          this.$emit('my_events','my params')
        },
        handleEvents(e){
          console.log(this.message,e)
        }
      }
    })
  </script>
</body>
</html>

这个例子中,我们本可以直接使用@click来绑定时间,但我们使用了on和emit,看起来麻烦多了,但这样写可以帮助我们将事件的定义和消费分开,实现逻辑的解耦。
在这里插入图片描述
在vue源码中,on方法接收两个参数,第一个event函数名,第二个fn执行的方法,可以看到这里先把Vue的实例传给vm,然后判断event是不是数组,如果是数组,就通过循环的方式来进行赋值,继续调用$on方法,如果不是数组的话,先判断vm是否存在vm._events[event],如果不存在,就去新建一个,并且把第二个参数fn存到这个数组中。

因此,我们可以同时为一个事件定义多个执行方法
我们可以写成

this.$on('my_events',this.handleEvents)
this.$on('my_events',this.handleEvents2)

这些事件都会加入到vm._events[event]这个数组当中

除此以外,我们也可以为不同的事件,绑定同一个方法

this.$on(['my_events1','my_events2'], this.handleEvents)

这样my_events和my_events2触发时都会执行handleEvents方法了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值