在父元素中定义一个click事件,而子元素同样定义一个click事件,当点击子元素的click事件时会冒泡事件到父元素的click,而我们不想触发父元素的click事件,故需要使用click.stop会阻止事件冒泡,但当你在组件使用click.stop事件时,会报错 [TypeError] {message: “e.stopPropagation is not a function”},示例代码如下所示:
<u-card class="card" @click="showDatatail(item.dataValue)">
<u-icon name="eye-off" color="success" label="关闭详情"
@click.stop="deviceData.showAllData = false"></u-icon>
</u-card>
我们找到组件的源码,发现它定义的是
methods: {
click() {
this.$emit("click", this.index);
},
touchstart() {
this.$emit("touchstart", this.index);
}
}
即emit了当前的index,而不是一个event对象,故我们需要对源代码进行适当修改,如下所示:
methods: {
click() {
event.data = this.index
this.$emit('click', event)
//this.$emit("click", this.index);
},
touchstart() {
this.$emit("touchstart", this.index);
}
}
将this.index赋值给event对象的data,再将event对象emit出去,可解决e.stopPropagation 不是一个方法的问题,如果在其他地方用于同样的问题可以参考本示例