數據綁定部分講了,對象狀態發生變化,通知頁面更新視圖元素的單向數據流向。html
一旦用戶操做或者數據更新引發數據變化,視圖須要同步更新。就須要用到事件傳遞了。視圖上的數據都必須用過事件傳遞給對象,只有用戶操做視圖,才能獲取到數據,並更新對象狀態。調用this.setData()方法實現視圖的部分渲染。前端
<!-- index.wxml --> <view bindtap="changeText" data-hi="wechat" id="tapTest"> {{ message }} </view>
index.js:
Page({
data: { message: 'Hello MINA!' }, changeText: function(e){ console.log(e) this.setData({ message:'changed data' }) } })
事件分爲冒泡事件和非冒泡事件:小程序
WXML的冒泡事件列表:緩存
類型 | 觸發條件 | 最低版本 |
---|---|---|
touchstart | 手指觸摸動做開始 | |
touchmove | 手指觸摸後移動 | |
touchcancel | 手指觸摸動做被打斷,如來電提醒,彈窗 | |
touchend | 手指觸摸動做結束 | |
tap | 手指觸摸後立刻離開 | |
longpress | 手指觸摸後,超過350ms再離開,若是指定了事件回調函數並觸發了這個事件,tap事件將不被觸發 | 1.5.0 |
longtap | 手指觸摸後,超過350ms再離開(推薦使用longpress事件代替) | |
transitionend | 會在 WXSS transition 或 wx.createAnimation 動畫結束後觸發 | |
animationstart | 會在一個 WXSS animation 動畫開始時觸發 | |
animationiteration | 會在一個 WXSS animation 一次迭代結束時觸發 | |
animationend | 會在一個 WXSS animation 動畫完成時觸發 | |
touchforcechange | 在支持 3D Touch 的 iPhone 設備,重按時會觸發 |
圖:事件冒泡與捕獲架構
事件綁定的寫法以 key、value 的形式。函數
<view id="outer" bindtap="handleTap1"> outer view <view id="middle" catchtap="handleTap2"> middle view <view id="inner" bindtap="handleTap3">inner view</view> </view> </view>
bind事件綁定不會阻止冒泡事件向上冒泡,catch事件綁定能夠阻止冒泡事件向上冒泡。post
捕獲階段位於冒泡階段以前,且在捕獲階段中,事件到達節點的順序與冒泡階段剛好相反。須要在捕獲階段監聽事件時,能夠採用capture-bind、capture-catch關鍵字,後者將中斷捕獲階段和取消冒泡階段。動畫
在下面的代碼中,點擊 inner view 會前後調用handleTap二、handleTap四、handleTap三、handleTap1。ui
<view id="outer" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2" > outer view <view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4" > inner view </view> </view>
若是將上面代碼中的第一個capture-bind改成capture-catch,將只觸發handleTap2。this
<view id="outer" bind:touchstart="handleTap1" capture-catch:touchstart="handleTap2" > outer view <view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4" > inner view </view> </view>
----------------------------------------
小程序系列:
基礎使用: component使用 、 wxs使用 、 節點操做 、 頁面跳轉 、 緩存
----------------------------------------