淺析js中mvvm模式實(shí)現(xiàn)的原理
以Vue.js框架為例子,使用的mvvm模式

view指的是頁(yè)面的html和css構(gòu)成的視圖。
model指的是從后端取到的數(shù)據(jù)模型
viewmodel 指的是前端開(kāi)發(fā)人員組織生成和維護(hù)的視圖數(shù)據(jù)層。這一層包含的是視圖行為和數(shù)據(jù)。
視圖行為指的是如頁(yè)面加載進(jìn)來(lái)時(shí)請(qǐng)求什么,將指定的數(shù)據(jù)放到指定的元素上,點(diǎn)擊某個(gè)元素觸發(fā)某事件。當(dāng)viewmodel處理好后則會(huì)將對(duì)應(yīng)的數(shù)據(jù)展現(xiàn)到view層。
MVVM模式的優(yōu)點(diǎn)在于當(dāng)view和viewmodel的雙向綁定,當(dāng)數(shù)據(jù)改變后不需要改修改DOM結(jié)構(gòu)。
例如原生js實(shí)現(xiàn)一個(gè)input的值綁定另一個(gè)div的文本,首先需要監(jiān)聽(tīng)input事件,每次改變觸發(fā)一次div節(jié)點(diǎn)的文本子節(jié)點(diǎn)進(jìn)行修改。使用了MVVM模式則可以自動(dòng)檢測(cè)到數(shù)據(jù)的改變從而修改div文本
mvvm的實(shí)現(xiàn)原理:利用Object.defineProperty(),該方法有g(shù)et、set兩個(gè)屬性方法,從而獲取對(duì)象屬性的值,給對(duì)象屬性重新賦值
//定義一個(gè)對(duì)象
let obj = {}
Object.defineProperty(obj,'txt'{
//obj.txt屬性賦值方法,同時(shí)為input、p文本賦同一個(gè)值
set(val){
document.getElementById('input').value = val
document.getElementById('output').innerHTML = val
},
//獲取txt屬性的方法
get(){
return obj;
}
})
//監(jiān)聽(tīng)事件 觸發(fā)的時(shí)候會(huì)給obj.txt重新賦值,從而實(shí)現(xiàn)雙向綁定
document.addEventListener('keyup',(e)=>{
obj.txt = e.target.value;
})
相關(guān)文章
JavaScript sub方法入門(mén)實(shí)例(把字符串顯示為下標(biāo))
這篇文章主要介紹了JavaScript sub方法入門(mén)實(shí)例,sub方法用于把字符串顯示為下標(biāo),需要的朋友可以參考下2014-10-10
JS嚴(yán)格模式知識(shí)點(diǎn)總結(jié)
本篇文章給大家整理了JS嚴(yán)格模式下的相關(guān)知識(shí)點(diǎn)以及代碼實(shí)例分享,感興趣的跟著小編一起學(xué)習(xí)下吧。2018-02-02
JavaScript 學(xué)習(xí)初步 入門(mén)教程
看了《21天學(xué)習(xí)JavaScript》的視頻教程,感覺(jué)就是語(yǔ)法好熟悉,和C++類(lèi)似,和C#類(lèi)似,和Java類(lèi)似!幡然悔悟這些語(yǔ)言的語(yǔ)法都是類(lèi)似的,數(shù)據(jù)類(lèi)型,對(duì)象方法(或者稱(chēng)之為函數(shù),由于我是個(gè)菜鳥(niǎo)所以也數(shù)不清楚到底是什么)。2010-03-03
JavaScript入門(mén)教程(10) 認(rèn)識(shí)其他對(duì)象
對(duì)于需要更好的控制html的一些元素,就需要了解這些了。大家知道就行,有需要時(shí)可以再看。2009-01-01
javascript中怎么做對(duì)象的類(lèi)型判斷
javascript中經(jīng)常使用的對(duì)象判斷方式包括:typeof、constructor和Object.prototype.toString.call()2013-11-11
JavaScript中使用自然對(duì)數(shù)ln的方法
這篇文章主要介紹了JavaScript中使用自然對(duì)數(shù)ln的方法,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06

