微信小程序 數(shù)據(jù)綁定詳解及實(shí)例
微信小程序最近要火,火不火看看微信用戶就知道了,做前端的朋友可以大展身手,跟上腳步,這里來介紹下微信小程序的數(shù)據(jù)綁定。
>>>數(shù)據(jù)視圖綁定
做前端開發(fā)的同學(xué),尤其是WEB前端,每天都要跟視圖打交道,假如你是用過jQuery,你就能體會到j(luò)Query的代碼冗余和操作不便性,需要手動管理視圖和對象的數(shù)據(jù)一致性。
以下數(shù)據(jù)和對象等同。
傳統(tǒng)的視圖和數(shù)據(jù)綁定

那么微信小程序是通過什么方法來管理視圖和對象綁定的呢?狀態(tài)模式-單向數(shù)據(jù)流。
狀態(tài)模式定義一個對象,這個對象可以通過管理其狀態(tài)從而使得應(yīng)用程序作出相應(yīng)的變化。

簡單的講,對象狀態(tài)化,只要對象狀態(tài)發(fā)送變化,就通知頁面更新視圖元素。
三個步奏:
1. 識別哪個UI元素被綁定了相應(yīng)的對象。
2. 監(jiān)視對象狀態(tài)的變化。
3. 將所有變化傳播到綁定的視圖上。
注意數(shù)據(jù)流向是單向的,即視圖變化不會影響對象狀態(tài)。
<view> {{ message }} </view>
Page({
data: {
message: 'Hello MINA!'
}
})
就這么簡單完成視圖跟數(shù)據(jù)的綁定。
僅僅通過數(shù)據(jù)更新視圖是不夠的,用戶操作引起視圖更新,數(shù)據(jù)怎么同步呢?
這里要區(qū)分的是,用戶觸發(fā)事件不僅要考慮當(dāng)前UI元素更新,還會通過當(dāng)前元素更新其他視圖。
所以視圖上的數(shù)據(jù)都必須用過事件傳遞給對象,只有用戶操作視圖,才能獲取到數(shù)據(jù),并更新對象狀態(tài)。
如下圖:

什么是『事件』:
事件是視圖層到邏輯層的通訊方式。
想知道為什么的童鞋可以了解數(shù)據(jù)單雙向流,這里不介紹了。
再來看視圖與視圖之間是如何影響?

流程說明:
1. 視圖A由于用戶操作,觸發(fā)事件A
2. 事件A處理函數(shù)中,更新對象A和對象B的狀態(tài)
3. 由于對象A和B狀態(tài)變化,通知視圖A和B更新
我們以用戶登錄為例,用戶點(diǎn)擊(事件A)登錄按鈕后,把按鈕變成禁用不可點(diǎn)(視圖A),同時彈出等待框(視圖B).
部分代碼如下:
<view>
<loading hidden="{{loadingHidden}}">正在登錄...</loading>
<button type="primary" size="default" disabled="{{disabled}}" bindtap="loginBtn">數(shù)據(jù)請求</button>
</view>
Page({
data:{
disabled: false,
loadingHidden: true
},
//按鈕事件
loginBtn: function(event){
//禁用按鈕
this.setData({disabled: true});
//彈出正在登錄框
this.setData({loadingHidden: false});
}
})
總結(jié):
現(xiàn)在流行數(shù)據(jù)單雙向綁定,小程序使用了單向數(shù)據(jù)流,如果采用傳統(tǒng)的jQuery方式操作數(shù)據(jù)和視圖,開發(fā)效率低,開發(fā)者不買賬。如果采用雙向數(shù)據(jù)流,程序執(zhí)行效率偏低,而且是邏輯層對象狀態(tài)不可控。
總體來說,小程序數(shù)據(jù)視圖單向綁定開發(fā)模式,讓開發(fā)者專注于事件處理上,改變對象狀態(tài),實(shí)現(xiàn)視圖更新。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
微信小程序 scroll-view組件實(shí)現(xiàn)列表頁實(shí)例代碼
這篇文章主要介紹了微信小程序 scroll-view組件實(shí)現(xiàn)列表頁實(shí)例代碼的相關(guān)資料,scroll-view組件介紹scroll-view是微信小程序提供的可滾動視圖組件,其主要作用是可以用來做手機(jī)端經(jīng)常會看到的上拉加載 ,需要的朋友可以參考下2016-12-12
JavaScript專題之underscore防抖實(shí)例學(xué)習(xí)
這篇文章主要為大家介紹了JavaScript專題之underscore防抖實(shí)例學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
js前端設(shè)計模式優(yōu)化50%表單校驗(yàn)代碼示例
這篇文章主要為大家介紹了js前端設(shè)計模式優(yōu)化50%表單校驗(yàn)代碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
微信小程序網(wǎng)絡(luò)請求wx.request詳解及實(shí)例
這篇文章主要介紹了微信小程序網(wǎng)絡(luò)請求wx.request詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
一文了解JavaScript用Element?Traversal新屬性遍歷子元素
這篇文章主要介紹了一文了解JavaScript用Element?Traversal新屬性遍歷子元素,文章圍繞Element?Traversal新屬性的相關(guān)資料展開詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對大家有所幫助2021-11-11

