vue資料雙向繫結原理

2022-04-01 19:00:06 字數 1299 閱讀 9161

vue的資料雙向繫結的小例子:

。html

index.js

function selfvue (data, el, exp) );

//對data的每一層級的屬性進行監聽,如果變化執行notify

observe(data);

//初始化模板資料的值

el.innerhtml = this

.data[exp];

new watcher(this

, exp, function (value) );

return

this;}

selfvue.prototype =,

set: (newval)=>

});}

}

observer.js

function observer(data) 

observer.prototype =);

},definereactive: function(data, key, val)

return

val;

},set: function(newval)

val =newval;

dep.notify();

}});

}};function observe(value, vm)

return

newobserver(value);

};function dep ()

dep.prototype =,

notify: function() );

}};dep.target = null;

watcher.js

function watcher(vm, exp, cb) 

watcher.prototype =,

run: function()

},get: function() )被新增上

dep.target = null; //

釋放自己

return

value;

}};

原理:當new vue後,將data屬性直接給vm新增上,將屬性的每一級進行set get 當set新值時通知notify函式。執行 new watcher ,強制執行data的get 使watch被新增上。

當data set新值時,觸發notify函式,使所有watcher都執行update,watcher的update時,本地的value是舊值,取新值,**函式更新view。

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...

vue 雙向資料繫結原理

1 2 input type text id input 34 p id desc p 1 let obj 2 let temp 採用臨時變數 obj 3 object.defineproperty obj,name 8 給obj的name屬性賦值會觸發 9set val 15 1617 設定了id...