事件傳參:在觸發事件時,將一些數據作為參數傳遞給事件處理函數的過程,就是事件傳參;
在微信小程序中,我們經常會在組件上添加一些自定義數據,然后在事件處理函數中獲取這些自定義數據,從而完成業務邏輯的開發,這個過程稱為小程序的事件傳參;
在組件上通過 data-* 定義需要傳遞的數據,其中 * 是自定義的屬性,例如:<view data-id="100" bindtap="handler" />
,代碼中的 id 就是自定義的屬性,屬性值 100 是需要傳遞的數據,然后通過事件對象獲取自定義的數據;
下面打開微信開發者工具演示一下事件傳參的使用步驟,在演示完后講解一下相關的注意事項:
-
在 pges/cate/cate.wxml 文件中添加下面代碼:
<view><button bind:tap="btnHandler" data-id="1" data-name="tom">按鈕</button> </view>
綁定事件 btnHandler,自定義 id 和 name 數據;
-
在 pages/cate/cate.js 文件中定義 btnHandle 事件處理函數:
btnHandler(event){console.log(event)}
-
在 pages/cate/cate.scss 文件中定義一下 view 的樣式:
view {display: flex;height: 300rpx;background-color: skyblue;align-items: center; }
在頁面中點擊按鈕,在 console 中可以看到打印的事件對象信息,如下:
打開事件對象,可以看到在 currentTarget 和 target 中都能看到傳遞的數據信息,如下:
這時候我們需要了解一下 currentTarget 和 target 的區別是什么:
- currentTarget:事件綁定者,也就是指哪個組件綁定了當前事件處理函數;
- target:事件觸發者,也就是指哪個組件出發了當前事件處理函數;
在這個例子中,currentTarget 的事件綁定者是 btn 按鈕,target 的事件觸發者也是 btn 按鈕;
接下來看一下 currentTarget 和 target 不是指向同一個組件的情況:
- 在 pages/cate/cate.wxml 中添加下面代碼:
<view bind:tap="parentHandler" data-parentid="1" data-parentname="tom"><button data-id="1" data-name="tom">按鈕</button>
</view>
- 在 pages/cate/cate.js 中添加下面代碼:
parentHandler (event) {console.log(event)}
刷新重新運行,清空 console 區域,點擊按鈕周圍的藍色區域(注意不要點擊按鈕),觀察 console 打印的事件對象信息,如下:
可以看到,在打印的事件對象中,currentTarget 獲得的數據是 parentid 和 parentname,可以知道當前的事件綁定者是 view,如下:
同樣,target 獲取的數據也是 parentid 和 parentname,可以知道當前事件的觸發者也是 view,如下:
下面點擊按鈕(注意不要點擊按鈕外的藍色區域),觀察 console 打印的事件數據,可以發現,currentTarget 綁定的數據是 view 對應的自定義數據,如下:
再看一下 target 的數據,可以看到 target 中綁定的數據是 button 中對應的自定義數據,因為這里是點擊按鈕觸發的事件,所以 target 的數據為 button 中定義的數據,如下:
接下來講解一下兩個注意事項:
-
假如事件在傳遞參數的時候,自定義屬性是由多個單詞來組成的,單詞與單詞之間使用中劃線(-)來分隔,獲取事件對象的數據的時候需要使用駝峰格式,比如上面的 parentid 和 parentname 修改為中劃線格式,如下:
<view bind:tap="parentHandler" data-parent-id="1" data-parent-name="tom"><button data-id="1" data-name="tom">按鈕</button> </view>
使用中劃線命名屬性之后,我們在開發者模式中看一下如何獲取對應的數據屬性,打開 console 模式,點擊按鈕,在打印的數據中可以看到,對應的屬性名變為了駝峰命名寫法,如下:
在定義數據的時候,使用的是中劃線,在獲取數據的時候,使用駝峰格式;因此我們需要注意,當使用中劃線命名單詞的時候,獲取事件對象的數據需要使用駝峰格式獲取數據;
-
假如事件在傳遞參數的時候,自定義參數使用駝峰命名,在獲取事件對象的數據的時候,需要使用全小寫的格式,如下:
簡單對上面的內容進行總結:
- 事件傳參使用 data-* 的格式;
- event.currentTarget 是指事件綁定者,event.target 是指事件觸發者;
- 使用 data- 方法傳遞參數時,多個單詞由中劃線-連接時,獲取事件數據時需要使用駝峰寫法;
- 使用 data- 方法傳遞參數時,多個單詞由駝峰寫法定義時,獲取事件數據時需要使用全小寫格式;
參考視頻:尚硅谷微信小程序開發教程