vue的v-model原理簡述

一瞻想,v-model是什么

v-model就是vue的雙向綁定的指令咆耿,能將頁面上控件輸入的值同步更新到相關(guān)綁定的data屬性,也會在更新data綁定屬性時(shí)候故硅,更新頁面上輸入控件的值庶灿。

二,為什么使用v-model

v-model作為雙向綁定指令也是vue兩大核心功能之一吃衅,使用非常方便往踢,提高前端開發(fā)效率。在view層捐晶,model層相互需要數(shù)據(jù)交互菲语,即可使用v-model妄辩。

三,v-model的原理簡單描述

v-model主要提供了兩個(gè)功能山上,view層輸入值影響data的屬性值眼耀,data屬性值發(fā)生改變會更新view層的數(shù)值變化。以下以input控制綁定v-model舉例說明佩憾。

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
</head>
<body>
   <div id="app">
       <p>{{name}}</p>
       <input type="text" v-model="name" />
   </div>
</body>
</html>

3.1 input 輸入值后更新data

??首先在頁面初始化時(shí)候哮伟,vue的編譯器會編譯該html模板文件,將頁面上的dom元素遍歷生成一個(gè)虛擬的dom樹妄帘。再遞歸遍歷虛擬的dom的每一個(gè)節(jié)點(diǎn)楞黄。當(dāng)匹配到其是一個(gè)元素而非純文本,則繼續(xù)遍歷每一個(gè)屬性抡驼。
??如果遍歷到v-model這個(gè)屬性鬼廓,則會為這個(gè)節(jié)點(diǎn)添加一個(gè)input事件,當(dāng)監(jiān)聽從頁面輸入值的時(shí)候致盟,來更新vue實(shí)例中的data想對應(yīng)的屬性值碎税。

    // 假如node是遍歷到的input節(jié)點(diǎn)
    node.addEventListener("input",function(e){
        vm.name=e.target.value;
    })  

3.2data的屬性賦值后更新input的值

??同樣初始化vue實(shí)例時(shí)候,會遞歸遍歷data的每一個(gè)屬性馏锡,并且通過defineProperty來監(jiān)聽每一個(gè)屬性的get雷蹂,set方法,從而一旦某個(gè)屬性重新賦值杯道,則能監(jiān)聽到變化來操作相應(yīng)的頁面控制匪煌。

    Object.defineProperty(data,"name",{
        get(){
            return data["name"];
        },
        set(newVal){
            let val=data["name"];
            if (val===newVal){
                return;
            }
            data["name"]=newVal;
            // 監(jiān)聽到了屬性值的變化,假如node是其對應(yīng)的input節(jié)點(diǎn)
            node.value=newVal;
        }    
    })

四,總結(jié)

??其核心就是党巾,一方面modal層通過defineProperty來劫持每個(gè)屬性萎庭,一旦監(jiān)聽到變化通過相關(guān)的頁面元素更新。另一方面通過編譯模板文件昧港,為控件的v-model綁定input事件擎椰,從而頁面輸入能實(shí)時(shí)更新相關(guān)data屬性值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末创肥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子值朋,更是在濱河造成了極大的恐慌叹侄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昨登,死亡現(xiàn)場離奇詭異趾代,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丰辣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門撒强,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禽捆,“玉大人,你說我怎么就攤上這事飘哨∨呦耄” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵芽隆,是天一觀的道長浊服。 經(jīng)常有香客問我,道長胚吁,這世上最難降的妖魔是什么牙躺? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮腕扶,結(jié)果婚禮上孽拷,老公的妹妹穿的比我還像新娘。我一直安慰自己半抱,他們只是感情好脓恕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著代虾,像睡著了一般进肯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棉磨,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天江掩,我揣著相機(jī)與錄音,去河邊找鬼乘瓤。 笑死环形,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衙傀。 我是一名探鬼主播抬吟,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼统抬!你這毒婦竟也來了火本?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤聪建,失蹤者是張志新(化名)和其女友劉穎钙畔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體金麸,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡擎析,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挥下。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揍魂。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桨醋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出现斋,到底是詐尸還是另有隱情喜最,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布步责,位于F島的核電站返顺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蔓肯。R本人自食惡果不足惜遂鹊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔗包。 院中可真熱鬧秉扑,春花似錦、人聲如沸调限。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耻矮。三九已至秦躯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裆装,已是汗流浹背踱承。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哨免,地道東北人茎活。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像琢唾,于是被迫代替她去往敵國和親载荔。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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

  • vue概述 在官方文檔中采桃,有一句話對Vue的定位說的很明確:Vue.js 的核心是一個(gè)允許采用簡潔的模板語法來聲明...
    li4065閱讀 7,216評論 0 25
  • vue概述sd 在官方文檔中,有一句話對Vue的定位說的很明確:Vue.js 的核心是一個(gè)允許采用簡潔的模板語法來...
    去年的牛肉閱讀 4,046評論 0 1
  • 主要還是自己看的泌豆,所有內(nèi)容來自官方文檔。 介紹 Vue.js 是什么 Vue (讀音 /vju?/吏饿,類似于 vie...
    Leonzai閱讀 3,350評論 0 25
  • 一踪危、了解Vue.js 1.1.1 Vue.js是什么蔬浙? 簡單小巧、漸進(jìn)式贞远、功能強(qiáng)大的技術(shù)棧 1.1.2 為什么學(xué)習(xí)...
    蔡華鵬閱讀 3,323評論 0 3
  • VUE介紹 Vue的特點(diǎn)構(gòu)建用戶界面畴博,只關(guān)注View層簡單易學(xué),簡潔蓝仲、輕量俱病、快速漸進(jìn)式框架 框架VS庫庫,是一封裝...
    多多醬_DuoDuo_閱讀 2,709評論 1 17