自定义组件加click事件不生效

 问题

 为什么我们给div添加click事件就可以生效, 给自定义组件加了一个click事件, 点击了bigProductCard所在的区域, 去不会触发click的方法?

原因

很简单, div添加click事件是浏览器是原生html标签加了一个click事件, 浏览器会监听用户鼠标点击的操作, 然后通过vue的处理 , 出发点击回调函数;

 

而自定义组件的监听,  通过vue源码我们知道, v-on实际上是通过往子组件实例上绑了一个this.$on('click', func)事件, 这是个假的监听,  浏览器不会帮助我们处理的, 因为本质上只是往子组件实例上绑了一个this.$on('click')事件;   当子组件在某个时刻出发this.$emit('click') 时会调用this.$on('click',func)里的func;

仅此而已;

 

 

解决:

在子组件的模板里找个div, 加一个@click事件, 这个浏览器是会帮助我们监听的, 然后监听回调函数里出发this.$emit(click),  这样就可以出发占位符vnode 的this.$on('click',func);

 

posted @ 2022-11-03 11:30  Eric-Shen  阅读(542)  评论(0编辑  收藏  举报