Vue渲染原理及其雙向資料繫結詳解

2021-08-02 21:57:16 字數 1462 閱讀 6140

var

data

= ; var vm =

new vue();

function

nodetofragment

(node,vm)

return frag;

}var dom = nodetofragment(document.getelementbyid(id),this);

function

compile

(node,vm) \}/,// .為匹配除\r\n之外的任意單個字元,*為匹配前面字元任意多次

name;

//元素節點

if(node.nodetype == 1));//此處已假定node為input元素,監聽此input,若其value有變化則將其反映到vm.data的name中,name為'v-model'屬性對應的nodevalue。到這裡,已經實現了dom到vm.data的繫結。

new watcher(vm,node,name);//這一步實現vm.data到dom的繫結

node.removeattribute('v-model');//從node中刪除v-model屬性。

break;}}

}//若node為文字節點,判斷文字節點的值是不是}這種形式。

if(node.nodetype == 3)\}/中括號內匹配到的值,name在vm.data中也有

new watcher(vm,node,name);//為vm.name新增***,實現從vm到dom的繫結}}

}

function dep() 

dep.prototype = ,

notify:function () )

}};

function

watcher

(vm,node,name)

watcher.prototype =

};

function

observe

(obj) )

}function

definereactive

(obj,key,val)

return val;

},//當重寫vm.data中的屬性時,就重置vmodeleles中元素的value,vmodeleles為所有有v-model屬性的元素

set:function

(value)

if(value == val) return;

//若兩次值不同,將呼叫dep.notify方法,啟動所有watcher,更改nodevalue

val = value;

dep.notify();

console.log(val);

}});

}

vue雙向資料繫結及其底層原理

什麼式雙向資料繫結 viewmodel對model層進行更新的時候,viewmodel中的binder會自動地把資料更新到view層上去,當使用者操作了view層 例如 表單地輸入 viewmodel也會自動地把資料更新到model層上。這種方式成為 雙向資料通訊 雙向資料通訊的底層原理 vue在建...

vue雙向資料繫結原理

vue應用的是mvvm框架,view和model分離,然後通過vm雙向資料繫結,div 原生物件即資料 var data 建立乙個 viewmodel 例項 var vm new vue 然而乙個動態資料的繫結,是怎麼實現的呢,首先vue利用es5的defineproperty方法裡的get,set...

vue雙向資料繫結原理

text id text show p var text document.getelementbyid text show document.getelementbyid show var model object.defineproperty model,name set function ne...