封装自定义组件时如何正确传递事件监听器?

程序员美蓝 阅读 2

我最近在封装一个按钮组件,想让父组件能监听点击事件,但试了几次都没成功。我在子组件里用 $emit 触发事件,父组件用 @click 监听,结果完全没反应。

是不是我写法有问题?下面是我的子组件代码:

export default {
  name: 'MyButton',
  methods: {
    handleClick() {
      this.$emit('click', 'custom data');
    }
  }
}
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
西门逸轩
啊这个问题我遇到过!你的子组件代码其实没啥问题,但父组件那边可能写法不对。我来告诉你我是怎么做的:

在子组件里你已经正确使用了 $emit 来触发事件,很棒。关键是父组件那边绑定监听器的方式要注意。不能直接用 @click,得明确监听你自定义的事件名。

父组件应该这样写:



或者如果你的模板里已经绑定了原生点击事件:



记得检查下你的父组件有没有定义 handleButtonClick 方法哦!有时候我们以为事件没触发,其实是回调函数没定义(别问我怎么知道的,我在这坑里躺过半小时...)

另外如果你想让点击事件冒泡,可能还需要加上 .native 修饰符,不过现在Vue3已经不推荐这么用了。
点赞
2026-03-08 16:02