小程序數據綁定與事件綁定


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)
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM