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