1.如何定義頁面數據。
小程序中每個頁面,又四個部分,其中js文件內可以定義頁面的數據,生命周期函數,其他業務邏輯。
如果要在.js文件內定義頁面的數據,只需把數據定義到data節點下即可。
Page({ data:{ msg:'hello word' } })
2.數據綁定:
把data中的數據綁定到頁面中渲染,使用雙大括號,將變量包起來即可。
語法格式為:
<view>{{msg}} </view>
雙大括號語法的主要應用場景:綁定內容,綁定屬性,運算(三元表達式,算數運算,邏輯判斷,字符串運算,數據路徑運算)
3.屬性綁定:
<view id="item-{{id}}" ></view> Page({ data:{ id:"23423424" } })
4.運算:
<view>{{ flag ? "1" :"0" }}</view>
事件綁定:
事件是視圖層到邏輯層的通訊方式。
事件可以將用戶的行為反饋到邏輯層進行處理。
事件可以綁定在組件上,當組件書法事件,就會執行邏輯層中對應的事件處理函數。
bindtap綁定觸摸事件:
bindtap:觸摸事件
在小程序中,不存在網頁中的click鼠標點擊事件,而是通過bindtap事件來響應觸摸行為。
1.通過bindtap, 可以為組件綁定觸摸事件,語法如下:
<view bindtap="tapName">Click Me!</view>
2.在相應的Page定義中寫上相應的事件處理函數,事件參數是event
Page({ tapName: function (event) { console.log(event) } })
bindinput : 文本框輸入事件
在小程序中,通過input 事件來響應文本框的輸入事件。
1.通過bindinput,可以為文本框綁定輸入事件,語法如下:
<input bindinput="inputName"></input>
2.在相應的Page定義中寫上相應的事件處理函數,事件參數是event
Page({ inputName: function (event) { console.log(event) } })
data和文本框之間數據同步:(有點像React的操作方法)
在vue中通過v-model 可以很方便的將數據雙向綁定。而在微信中並沒有這樣的數據雙向綁定,要想使數據雙向綁定,需要手動的通過文本框的輸入事件綁定到data中。
綁定方法:
1.監聽文本框的數據變化
在文本框的input事件處理函數中,通過事件參數event,能夠訪問到文本框的最新值。
語法: event.detail.value
示例代碼:
inputName: function (event) { // 獲取到文本框中的最新數據 console.log(event.detail.value) }
2.修改data中的數據
通過this.setData(dataObject) 方法,可以給頁面中的data數據重新賦值。
例如:例如監聽文本框的數據變化,並把最新的值復制給data中的msg
inputName: function (event) { this.setData({ msg: event.detail.value }) }
事件傳參:
1.不能在綁定事件的同時傳遞參數
小程序的事件傳參比較特殊,不能在為組件綁定事件函數的同時為事件處理函數傳遞參數。
例如: 下面的代碼將不能正常工作:
<button bindtap="btnHandler(123)">按鈕</button>
因為小程序會把bindtap 后面指定的值,統一當作事件名稱來處理。
2.通過data-*自定義屬性傳參:
如果要在組件觸發事件處理函數的時候,傳遞參數,可以為組件提供data- 自定義屬性傳參。
示例代碼:
<button bindtap="btnHandle" data-info ="hello word" >按鈕</button>
其中,info 會被當作參數名,數值123 會被當作參數值。
3. 獲取data-* 自定義屬性中傳遞的參數
通過事件參數event.target.dataset.參數名,能夠獲取data-* 自定義屬性傳遞到事件處理函數中的參數。
示例代碼:
btnHandle: function (evnet) { console.log(event.target.dataset.info) }