MVVM框架

了解MVVM框架嗎春贸?

  • Vue.js
  • React.js
  • Angular.js

談?wù)勀銓VVM的認識?

MVVM的定義

M:Model(服務(wù)器上的業(yè)務(wù)邏輯操作)
V:View(頁面)
VM:ViewModel(Model與View之間核心樞紐拜秧,比如Vue.js)


微信圖片_20181130154445.png
  • Model與ViewModel之間的雙向關(guān)系
    Model通過Ajax通信,發(fā)送數(shù)據(jù)給ViewModel章郁。
    ViewModel也可以通過Ajax通信枉氮,發(fā)送請求給Model。

  • ViewModel與View之間的雙向關(guān)系
    ViewModel中的數(shù)據(jù)改變暖庄,可以同時改變View上的顯示內(nèi)容聊替。
    View上的內(nèi)容改變(比如輸入框中的內(nèi)容),也可以同時改變ViewModel中對應(yīng)的數(shù)據(jù)培廓。

MVC的定義惹悄,MVC與MVVM的區(qū)別

好文鏈接:MVC與MVVM的區(qū)別

雙向綁定是什么意思?

微信圖片_20181202104626.png

雙向是指ViewModel中的data部分和View之間的雙向關(guān)系肩钠。
正向:數(shù)據(jù)驅(qū)動頁面
反向:頁面更新數(shù)據(jù)

綁定是指自動化處理泣港,data改變了view隨之改變,反之也是价匠。
不用像傳統(tǒng)方式那樣当纱,通過onChange事件獲取用戶輸入,然后再通過改變innerHtml修改顯示踩窖。

雙向綁定是什么原理坡氯,可以寫出來嗎?

微信圖片_20181202141158.png

雙向綁定都是依賴ES5中一個重要的API,Object.defineProperty箫柳。

  • 正向
    Object.defineProperty的作用是監(jiān)聽data的變化手形,再監(jiān)聽到變化之后會觸發(fā)一個回調(diào)函數(shù)。
    所以悯恍,我們要在Object.defineProperty的回調(diào)函數(shù)中寫明data與View的關(guān)聯(lián)就可以了库糠,后續(xù)中data有變化就會自動根據(jù)你寫的關(guān)聯(lián)處理修改View的顯示內(nèi)容。
  • 反向
    當(dāng)用戶在View中輸入內(nèi)容時坪稽,使用input事件(比如onChange)曼玩,修改data的值。
    有些框架已經(jīng)為我們自動做了這個事情窒百,不需要我們再關(guān)心黍判。
    比如,在Vue框架中篙梢,可以使用V-Model方便的關(guān)聯(lián)view和data顷帖。
Object.defineProperty()

定義:
Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性渤滞, 并返回這個對象贬墩。

語法:
Object.defineProperty(obj, prop, descriptor)

參數(shù):
obj:要在其上定義屬性的對象。
prop:要定義或修改的屬性的名稱妄呕。
descriptor:將被定義或修改的屬性描述符陶舞。

返回值:
被傳遞給函數(shù)的對象。

// 這個例子中绪励,把obj對象和input綁定了肿孵。
// 當(dāng)obj的值發(fā)生變化時,input框的內(nèi)容也會自動發(fā)生變化
// 當(dāng)然疏魏,input框中的內(nèi)容發(fā)生改變時停做,只要幫點onChange事件就能改變obj了,不再做演示

<input type="text" id="userInput">

<script>
    // 數(shù)據(jù)雙向綁定
    const obj = {};

    Object.defineProperty(obj, "a", {
        value: 12,
        writable: true,
        enumerable: true,
        configurable: true
    });

    let bValue = 88;
    Object.defineProperty(obj, "b", {
        enumrable: true,
        configurable: true,
        get: function () {
            return bValue;
        },
        set: function (value) {
            bValue = value;

            // 綁定輸入框
            const userInput = document.getElementById("userInput");
            userInput.value = value;
        }
    });
</script>

好文鏈接:理解Object.defineProperty

object.defineProperty()與reflect.defineProperty()的區(qū)別
  • object.defineProperty()返回的是修改后的新對象
  • reflect.defineProperty()返回的是一個布爾值

使用了什么設(shè)計模式大莫?

微信圖片_20181203103556.png
  • Observer:監(jiān)聽者
    監(jiān)聽Data的變化蛉腌,一旦監(jiān)聽到變化,就通知Dep(觀察者列表)
  • Dep:觀察者列表
    一旦收到來自O(shè)bserver的通知只厘,就會回調(diào)所有的觀察者(Watcher)烙丛,做相應(yīng)的更新處理。
  • Watcher:觀察者
    觀察者這里存放的就是相應(yīng)的更新處理羔味,會更新View的顯示內(nèi)容河咽。
    另外,觀察者可以通過訂閱的方式介评,加入到Dep(觀察者列表中)

生命周期是什么?

  • Vue的生命周期


    lifecycle.png
  • React的生命周期


    lifecycle-react.png

有看過源碼嗎?

们陆。寒瓦。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坪仇,一起剝皮案震驚了整個濱河市杂腰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椅文,老刑警劉巖喂很,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異皆刺,居然都是意外死亡少辣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門羡蛾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漓帅,“玉大人,你說我怎么就攤上這事痴怨∶Ω桑” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵浪藻,是天一觀的道長捐迫。 經(jīng)常有香客問我,道長爱葵,這世上最難降的妖魔是什么施戴? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮钧惧,結(jié)果婚禮上暇韧,老公的妹妹穿的比我還像新娘。我一直安慰自己浓瞪,他們只是感情好懈玻,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乾颁,像睡著了一般涂乌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上英岭,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天湾盒,我揣著相機與錄音,去河邊找鬼诅妹。 笑死罚勾,一個胖子當(dāng)著我的面吹牛毅人,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尖殃,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼丈莺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了送丰?” 一聲冷哼從身側(cè)響起缔俄,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎器躏,沒想到半個月后俐载,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡登失,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年遏佣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壁畸。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡贼急,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捏萍,到底是詐尸還是另有隱情太抓,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布令杈,位于F島的核電站走敌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏逗噩。R本人自食惡果不足惜掉丽,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望异雁。 院中可真熱鬧捶障,春花似錦、人聲如沸纲刀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽示绊。三九已至锭部,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間面褐,已是汗流浹背拌禾。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留展哭,地道東北人湃窍。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓闻蛀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親您市。 傳聞我的和親對象是個殘疾皇子循榆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 前言 談起MVC,MVP和MVVM這三個最耳熟能詳?shù)腁ndroid框架墨坚,相信大家對它們都不陌生,但在實際的情況下映挂,...
    ghroost閱讀 3,869評論 0 40
  • 對MVVM的認識 深入了解:http://www.ruanyifeng.com/blog/2015/02/mvcm...
    阿昕_閱讀 1,070評論 0 2
  • 初探安卓MVVM框架設(shè)計# 一. 什么是MVVM? MVVM是近幾年流行的一種設(shè)計框架,基于該框架設(shè)計的應(yīng)用程序具...
    Kevin1205閱讀 3,447評論 7 39
  • 還以為一伸手就能把過去拉回來 太無知只相信泽篮, 人能一步踏向未來。 別怪毀滅一瞬排山倒海柑船。 用什么公式帽撑, 能把人心的...
    聞道南嘉閱讀 559評論 0 0
  • 01 重返 她很熟悉這條街,街邊墻網(wǎng)后種著一整排櫻樹鞍时,當(dāng)櫻花瓣飄落在你肩上的時候亏拉,你會發(fā)現(xiàn)它在發(fā)光。不過這不是經(jīng)常...
    遙然閱讀 484評論 2 4