前端的數據雙向綁定指的是view(視圖)和model(數據)兩者之間的關系;view層是頁面上展示給用戶看的信息,model層一般是指通過http請求從后臺返回的數據。view到model的綁定都是通過事件回調函數操作的,model到view的綁定有多種方法。
angular,react,vue等mv*模式的框架都實現了數據雙向綁定;angular是通過臟檢查即新老數據的比較來確定哪些數據發生了變化,從而將它更新到view中;vue則是通過設置數據的get和set函數來實現的,這種方式在性能上是優于angular的。
下面代碼是一個簡單的定義數據get和set方法的例子,set和get方法分別在數據改變和訪問的時候被調用,能夠監聽數據的變化:
// 數據綁定的構造函數function Observer(data) { this.data = data; for(var key in data) { if(data.hasOwnProperty(key)) { var val = data[key]; if(typeof data[key] === "object"){ // 如果值不為原始類型,則繼續遞歸 new Observer(val); }else { this.convert(key, val); } } }}// 定義set 和 get函數Observer.prototype.convert = function(key, val) { Object.defineProperty(this.data, key, { enumerable: true, confingurable: true, get: function() { console.log(key + "被訪問了"); return val; }, set: function(newVal) { console.log(key + "被設置了新值" + newVal); val = newVal; } });}var app = new Observer({name: "xieshuai", age: 24, address: {city: "shenzheng"}});app.data.name; // name被訪問了app.data.age = 18; // age被設置了新值18Object.defineProperty,這是ES6新增的方法,通過這個方法,可以自定義getter和setter函數。
上面的代碼只是個簡單的例子,并沒有處理數組的情況;不過這是vue實現數據雙向綁定的核心。
本文到此結束,文中若有不對之處,還望指正。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答