微信小程序自定义组件阻止click事件冒泡

怎么说呢,官方没有找到类似js的阻止冒泡的方法,网上的 stopPropagationreturn false全部阵亡。

不过可以通过 catch:tap 代替 bind:tap 可是,如果我的场景是这样子,该怎么办呢:

写了一个img组件。这个组件有一个预览参数,点击img后进入组件内部事件预览图片。
但是在其他场景,这个img只是为了显示一个ico,需要在页面上点击后做跳转怎么办。

这个时候只能找到能够在img自定义组件中的阻止冒泡的事件。

最终在官方文档找到了一线生机,就是我先使用catch:tap,然后在处理在这里插入代码片函数中手动发射tap事件。注意需要设置允许冒泡。

完整代码

<image catch:tap="click"></image>
function click(event){
	if (!this.data.preview) {
		var myEventDetail = {} // detail对象,提供给事件监听函数
		var myEventOption = { bubbles: true } // 触发事件的选项
		this.triggerEvent('tap', myEventDetail, myEventOption)
		return;
	}
	wx.previewImage({
		urls: [this.data.fullSrc],
 	})
}

参考的微信小程序官方文档
https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html#%E8%A7%A6%E5%8F%91%E4%BA%8B%E4%BB%B6

### 微信小程序中的冒泡事件参数传递机制 在微信小程序中,冒泡事件是指当某个组件上的事件被触发后,该事件会沿着 DOM 树向上逐级传播到其父节点。这种特性允许开发者在一个父容器上监听多个子组件事件,从而简化代码逻辑并提高性能。 #### 冒泡事件的工作原理 冒泡事件的核心在于事件从目标组件出发,逐步向上传播至顶层父组件的过程。在这个过程中,如果某一层捕获到了事件,则可以通过 `e.detail` 接收来自子组件的数据[^3]。具体来说: - **事件对象结构**:微信小程序事件对象通常包含以下几个部分: - `type`: 事件类型(如 `tap`, `longtap` 等)。 - `timeStamp`: 时间戳。 - `target`: 当前事件的目标组件的信息。 - `currentTarget`: 绑定当前事件处理函数的组件信息。 - `detail`: 自定义数据字段,用于携带额外信息给父组件。 - **自定义数据传输**:通过设置 `data-*` 属性或者直接修改 WXML 中绑定事件的对象属性,可以将特定参数附加到事件对象的 `detail` 字段中[^4]。 --- #### 示例代码展示 以下是基于微信小程序实现冒泡事件参数传递的一个简单例子: ```html <!-- index.wxml --> <view bindtap="handleParentTap"> Parent View (点击这里不会触发任何操作) <button catchtap="handleChildTap" data-message="我是子按钮发送的消息">Click Me</button> </view> ``` ```javascript // index.js Page({ handleParentTap(e) { console.log('Parent Tap Event:', e); if (e.detail && e.detail.message) { console.log(`接收到子组件消息: ${e.detail.message}`); } else { console.log('未接收到来自子组件的消息'); } }, handleChildTap(e) { const message = e.currentTarget.dataset.message; this.triggerEvent('childMessage', { message }); // 向外抛出自定义事件 console.log('Child Button Clicked, Message Sent:', message); // 构造新的 detail 数据供上级使用 return { detail: { message: '这是由子组件构造的新消息' } }; } }); ``` 上述代码展示了以下几点功能: 1. 子组件 (`button`) 使用 `catchtap` 来阻止事件冒泡的同时主动调用 `triggerEvent()` 方法向外广播自定义事件。 2. 如果希望让事件继续冒泡,则可以在返回值中重新构建 `detail` 对象以便父组件获取更多信息[^1]。 --- #### 注意事项 尽管微信小程序支持多种类型的交互行为,但在实际开发中需要注意以下几点: - 并非所有的原生 HTML 元素都完全兼容标准浏览器的行为模式; - 特殊情况下可能需要借助第三方库来弥补平台差异带来的不便之处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值