雙向綁定的思想
雙向數據綁定的思想就是數據層與UI層的同步,數據再兩者之間的任一者發生變化時都會同步更新到另一者。
雙向綁定的一些方法
目前,前端實現數據雙向數據綁定的方法大致有以下三種:
1.發布者-訂閱者模式(backbone.js)
思路:使用自定義的data屬性在HTML代碼中指明綁定。所有綁定起來的JavaScript對象以及DOM元素都將“訂閱”一個發布者對象。任何時候如果JavaScript對象或者一個HTML輸入字段被偵測到發生了變化,我們將代理事件到發布者-訂閱者模式,這會反過來將變化廣播并傳播到所有綁定的對象和元素。
2.贓值檢測(angular.js)
思路:通過輪詢的方式檢測數據變動。才特定的事件觸發時進入贓值檢測。
大致如下:
? DOM事件,譬如用戶輸入文本,點擊按鈕等。( ng-click )
? XHR響應事件 ( $http )
? 瀏覽器Location變更事件 ( $location )
? Timer事件( $timeout , $interval )
? 執行 $digest() 或 $apply()
3.數據劫持(vue.js)
思路:使用Object.defineProperty對數據對象做屬性get和set的監聽,當有數據讀取和賦值操作時則調用節點的指令,這樣使用最通用的=等號賦值就可以觸發了。
wue雙向數據綁定小demo思路
① 構造一個Wue對象,定義該對象的屬性el、data,創建對象的時候傳相應數據,并執行init()方法。
varWue=function(params){this.el=document.querySelector(params.el);this.data=params.data;this.init();};
② Init方法中執行bindText和bindModel方法,這兩個方法分別是解析dom中綁定了w-model、w-text指令的html,并作相應處理。
init:function(){this.bindText();this.bindModel();}
③ bindText方法,把帶有w-text指令的元素放進一個數組中,如:w-text='demo',然后令其innerHTML的值等于傳進來的data[demo]。
bindText:function(){vartextDOMs=this.el.querySelectorAll('[w-text]'),bindText;for(vari=0;i<textDOMs.length;i++){bindText=textDOMs[i].getAttribute('w-text');textDOMs[i].innerHTML=this.data[bindText];}}
④ bindModel方法,把帶有w-model指令的元素(一般為form相關元素)放進一個數組中,如:w-model='demo',為每一個元素綁定keyup事件(兼容瀏覽器寫法)。
bindModel:function(){varmodelDOMs=this.el.querySelectorAll('[w-model]'),bindModel;var_that=this;for(vari=0;i<modelDOMs.length;i++){bindModel=modelDOMs[i].getAttribute('w-model');modelDOMs[i].value=this.data[bindModel]||'';//數據劫持this.defineObj(this.data,bindModel);if(document.addEventListener){modelDOMs[i].addEventListener('keyup',function(event){console.log('test');e=event||window.event;_that.data[bindModel]=e.target.value;},false);}else{modelDOMs[i].attachEvent('onkeyup',function(event){e=event||window.event;_that.data[bindModel]=e.target.value;},false);}}}
⑤ 使用Object.defineProperty,定義set和get方法,并在set方法中調用bindText方法。這是利用了一旦w-model的值在input中被改變,會自動執行set方法,所以只有在這個方法中調用更新w-text的方法即可。
defineObj:function(obj,prop,value){varval=value||'';var_that=this;try{Object.defineProperty(obj,prop,{get:function(){returnval;},set:function(newVal){val=newVal;_that.bindText();}})}catch(err){console.log('Browsernotsupport!')}}
⑥使用
html:<br><h4>雙向數據綁定demo</h4><pid="wrap"><inputtype="text"w-model='demo'><h6w-text='demo'></h6></p><br>js:<scriptsrc='../js/wue.js'></script><script>newWue({el:'#wrap',data:{demo:'winty'}})</script>
上述內容就是vue中雙向數據綁定的原理是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
少林寺上市了沒有?不是“少林寺還不是上市公司。少林寺能否上市需要看它的歷史沿革、法律、財務等方面的問題,不過大體判斷,上市的障礙應該比較小,因為現在有了科創板,尺度進一步放寬,未來如果上交所和深交所采用注冊制,上市的可能性就大了。”少林寺門票多少錢?少林寺門票為80元/人。自2018年9月20日起,《河南省降低國有景區門票價格實施方案》正式執行。河南省發改委宣布降低4家省管...
(資料圖)在生活中,很多人都不知道HD7750這個顯卡怎么樣是什么意思,其實他的意思是非常簡單的,下面就是小編搜索到的HD7750這個顯卡怎么樣相關的一些知識,我們一起來學習下吧!藍寶石HD7750 1G GDDR5顯卡是一款主流性能級獨立顯卡,和GTX650的性能相當。性能方面,評測顯示HD7750已超過HD6770,看功耗,HD7750明顯低很多,能耗比很高。HD7750是28NM的架構,和老...
在股市中,尤其使一些老的股民,一定會發現有很多的k線圖,如果不了解,就會覺得無從下手,看的會有些眼花繚亂,只有很好的了解這些k線圖,才可以從中看出股市的發展趨勢和走向。那么什么是道指k線圖呢?道指k線圖又代表著什么呢?怎么看道指k線圖呢?下面就這些相關的問題給大家介紹一下吧。首先給大家介紹什么是道指k線圖呢?道指k線圖指的是股票在交易日的一天內的變化情況,從k線圖上可以了解股票的發展的趨勢和走向,...