uniapp uk-uview解决 ‍[⁠TypeError⁠]‍ {message: “e.stopPropagation is not a function“}问题

在父元素中定义一个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 不是一个方法的问题,如果在其他地方用于同样的问题可以参考本示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值