uniapp 之 解决事件冒泡(如:阻止switch 的事件冒泡、nvue 页面阻止事件冒泡)

switch 阻止事件冒泡

场景描述:

  首先需求是点击该项进入该详情页面;点击switch 切换该项的状态;

图片:
在这里插入图片描述


错误解决方案


  错误效果:
在这里插入图片描述

  代码如下:

<view class="contacts-item" @tap="toEditContacts">
	<view class="item-title">
		<view class="item-title-left">
			<text class="contacts-name">张三丰</text>
			<image class="contacts-icon" src="/static/contract/icon_route.png" />
		</view>
		<view class="item-title-right">
			<switch :checked="isChecked" color="#FFCC33" @change.stop="changeIsChecked"/>
			<view class="switch-tips" :class="[ isChecked ? 'start-tips' : 'stop-tips' ]">
				{{ isChecked ? '启用' : '停用' }}
			</view>
		</view>
	</view>
</view>

很明显,这里给switch 的chage事件加了.stop并不起作用;


正确解决方案


  正确效果:
在这里插入图片描述

  代码如下:

<view class="contacts-list">
			<view class="contacts-item" @tap="toEditContacts">
				<view class="item-title">
					<view class="item-title-left">
						<text class="contacts-name">张三丰</text>
						<image class="contacts-icon" src="/static/contract/icon_route.png" />
					</view>
					<view class="item-title-right" @tap.stop.prevent>
						<switch :checked="isChecked" color="#FFCC33" @change.stop="changeIsChecked"/>
						<view class="switch-tips" :class="[ isChecked ? 'start-tips' : 'stop-tips' ]">
							{{ isChecked ? '启用' : '停用' }}
						</view>
					</view>
				</view>
</view>

直接在switch 的父元素上加 @tap.stop.prevent 即可解决;


nvue 页面阻止事件冒泡

说明:

  另外一种情况就是:@click.stop="handleClick" 在H5,小程序,普通app项目中起到阻止事件冒泡的作用,但是有个别页面不起作用,这个页面就是 nvue 页面;

nvue 页面阻止事件冒泡的解决方案:

<view @click.stop="getDetail">
	<view @click.stop="handleClick($event)">nvue 阻止事件冒泡,不会触发getDetail()事件</view>
</view>
getDetail() {
	console.log("获取详情")
},
handleClick(e) {
	// nvue 页面阻止事件冒泡
	// #ifdef APP-NVUE
	e.stopPropagation()
	// #endif
	
	// doing……
}



如有不足,望大家多多指点! 谢谢!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuangvi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值