微信小程序-bindtap等事件傳參

什麼是事件
事件是視圖層到邏輯層的通訊方式。 事件可以將用戶的行爲反饋到邏輯層進行處理。 
事件可以綁定在組件上,當達到觸發事件,就會執行邏輯層中對應的事件處理函數。 
事件對象可以攜帶額外信息,如 id, dataset, touches。

看圖,因爲需要傳遞的數據比較多,所以我們通過dataset攜帶參數信息。如果只有一個參數,可以通過id來傳遞。

詳解這裏寫圖片描述

這裏寫圖片描述(以常見的tap點擊事情爲例)
wxml

<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
JS

Page({
  tapName: function(event) {
    console.log(event)
  }
})
Page({ tapName: function(event) { console.log(event) } })
event 打印結果

{
"type":"tap",
"timeStamp":895,
/////////////////////////////////
"target": {
  "id": "tapTest",
  "dataset":  {
    "hi":"WeChat"
  }
},
"currentTarget":  {
  "id": "tapTest",
  "dataset": {
    "hi":"WeChat"
  }
},
///////////////////////////////
"detail": {
  "x":53,
  "y":14
},
"touches":[{
  "identifier":0,
  "pageX":53,
  "pageY":14,
  "clientX":53,
  "clientY":14
}],
"changedTouches":[{
  "identifier":0,
  "pageX":53,
  "pageY":14,
  "clientX":53,
  "clientY":14
}]
}

注意兩點:
1、data-名稱 不能有大寫字母,如果需要,可以通過 - (中劃線)來連接單詞,編譯的時候小程序會將第二個單詞首字母自動大寫。圖中代碼是爲了自己標誌,所以第二個單詞的首字母大寫了,其實可以不用。data-* 屬性中不可以存放對象。

2、注意打印結果中target和currentTarget的區別。

target 觸發事件的源組件。 
currentTarget 事件綁定的當前組件。

如果你在父容器上綁定了事件並傳參,當你點擊父容器時,事件綁定的組件和觸發事件的源組件是同一個元素,所以currentTarget 、target 都可以拿到參數,但是當你點擊子元素時,target 就不是事件綁定的組件了,所以拿不到參數。 
由於事件冒泡的機制,父容器上綁定的事件依然可以觸發,所以currentTarget 依然可以拿到參數。

說明
id傳參和dataset類似,只是最後獲取值的時候不同。event.currentTarget.id

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章