摘要:雙向數(shù)據(jù)綁定指的是,將對象屬性變化與視圖的變化相互綁定。數(shù)據(jù)雙向綁定已經(jīng)了解到是通過數(shù)據(jù)劫持的方式來做數(shù)據(jù)綁定的,其中最核心的方法便是通過來實現(xiàn)對屬性的劫持,達到監(jiān)聽數(shù)據(jù)變動的目的。和允許觀察數(shù)據(jù)的更改并觸發(fā)更新。
1 MVVM
雙向數(shù)據(jù)綁定指的是,將對象屬性變化與視圖的變化相互綁定。換句話說,如果有一個擁有name屬性的user對象,與元素的內(nèi)容綁定,當給user.name賦予一個新值,頁面元素節(jié)點也會相應(yīng)的顯示新的數(shù)據(jù)。同樣的,如果頁面元素(通常是input)上的數(shù)據(jù)改變,輸入一個新的值會導(dǎo)致user對象中的name屬性發(fā)生變化。
MVVM最早由微軟提出來,它借鑒了桌面應(yīng)用程序的MVC思想,在前端頁面中,把Model用純JavaScript對象表示,View負責顯示,兩者做到了最大限度的分離。
把Model和View關(guān)聯(lián)起來的就是ViewModel。ViewModel負責把Model的數(shù)據(jù)同步到View顯示出來,還負責把View的修改同步回Model。
總之一句話,數(shù)據(jù)與表現(xiàn)分離,當某一個數(shù)據(jù)改變時,頁面上所有使用這個數(shù)據(jù)的元素的內(nèi)容都會改變。下面是一個最簡單的數(shù)據(jù)綁定的例子,來自Vue2.0源碼閱讀筆記–雙向綁定實現(xiàn)原理,這個例子十分簡單粗暴,就做了三件事:
創(chuàng)建 obj 對象,用來保存數(shù)據(jù)
監(jiān)聽 keyup 事件,當事件觸發(fā)時,把選定的 input 標簽的值賦給 obj 對象的 hello 屬性。
改變 obj 對象 的 hello 屬性的 set 方法,當 hell 被賦值時,將這個值同時賦值給選中的兩個元素。