在微信小程序中,事件分為 冒泡事件 和 非冒泡事件 :
冒泡事件:當一個組件的事件被觸發后,該事件會向父節點傳遞;(如果父節點中也綁定了一個事件,父節點事件也會被觸發,也就是說子組件的事件和父組件的事件都會被觸發);
非冒泡事件:當一個組件的事件被觸發后,該事件不會向父節點傳遞;(如果父節點綁定了事件,父節點的事件不會被觸發,只有組件本身的事件會觸發);
在微信小程序中,使用 bind 綁定的事件,會觸發事件冒泡,如果想阻止事件冒泡,可以使用 catch 來綁定事件;
下面使用微信開發者工具來演示一下,在基于上一節的內容下進行演示,在 pages/cate/cate.wxml 中添加以下代碼:
<view class="catch" bind:tap="parentHandler"><button bind:tap="btnHandler">按鈕</button>
</view>
在 pages/cate/cate.scss 中添加以下樣式代碼:
.catch {display: flex;height: 300rpx;background-color: skyblue;align-items: center;
}
在 pages/cate/cate.js 中添加以下函數:
Page({parentHandler(){console.log('父組件綁定的事件')},btnHandler(){console.log('子組件觸發的事件')}
})
編寫完畢后,點擊重新編譯,點擊頁面的按鈕,可以看到子組件和父組件綁定的事件都觸發了,如下:
如果想實現點擊子組件按鈕的時候,只觸發子組件的事件,父組件的事件不觸發,則需要阻止子組件的事件冒泡;如果想阻止子組件的事件冒泡,就需要更改一下綁定事件的方式,我們需要把子組件綁定事件的方式從 bind:tap 修改為 catch:tap,如下:
<view class="catch" bind:tap="parentHandler"><button catch:tap="btnHandler">按鈕</button>
</view>
重新運行,點擊按鈕,可以發現父組件的事件沒有觸發,如下:
參考視頻:尚硅谷微信小程序開發教程