vue $emit细节处理

210 阅读1分钟
  • 问题1:@some-event="handleEvent()"带括号和不带括号的区别?
  • 问题2:$emit如果要传多个参数出来,及结合自定义的参数。怎么处理?
从源码分析可知:
如果带了(),则相当于会在我们绑定的事件外部再包装一层函数
// 可以自己去尝试看下

// 类似如下
on: {
  "emit-handle": function($event) {
    return _vm.handleEmitHandle()
  }
}

如果不带(),则会直接调用我们绑定的函数
  • 由上可知
  • ()不能随便带上,可能导致参数$event没能传到我们绑定的函数上面
  • ()时,我们是可以接收$event作为我们的参数的,随便放在哪个位置
  • 同时我们也发现,包装函数只接收一个参数为$event,如果我们希望包装函数可以接收我们$emit出来的全部参数,我们可以用arguments来接收包装函数的全部参数,作为我们绑定参数的一个实参
//类似
@some-event="handleEvent(arguments,1,2)"

// 或
@some-event="handleEvent(1,arguments,2)"

// 即,此时
on: {
  "emit-handle": function($event) {
    return _vm.handleEmitHandle(1,arguments,2)
  }
}
  • 总结
  • 带上()会执行包装函数,我们要用$event,或arguments来接收$emit的实参
  • 不带()会直接执行我们绑定的函数