mvvm
是model-view-viewmodel的簡寫。即模型-檢視-檢視模型。
參考:一、資料劫持-
1、object.defineproperty(obj, key, atts)
在建立vue例項的時候,通過data屬性來管理資料:
new
vue(})
;
然後使用object.defineproperty(obj, key, atts)
方法來對data進行get和set操作。例如:
object.
keys
(data)
.foreach
(key =
>
,set
(newvalue)})});
以上方法就是對data物件的所有屬性進行劫持,當取值的時候,觸發get方法,當賦值的時候觸發set方法,這樣就可以在get和set方法中新增一些邏輯處理。
2、vue原始碼中的資料劫持
vue原始碼中的資料劫持在目錄/src/core/observer/index.js
中的observer
class類裡,在呼叫walk
函式時,呼叫definereactive
函式,**如下:
object.
defineproperty
(obj, key,}}
return value
},set: function reactivesetter (newval)
/* eslint-enable no-self-compare */
if(process.env.node_env !=
='production'
&& customsetter)
// #7981: for accessor properties without setter
if(getter &&
!setter)
return
if(setter)
else
childob =
!shallow &&
observe
(newval)
dep.
notify()
}
二、繫結el和編譯模板以及指令在使用vue的時候,建立vue例項會繫結el元素節點:
new
vue(
);
三、mvvm原理圖
github原始碼:
Vue原始碼分析
在開始原始碼分析工作之前,我們在當前篇章做好相應的準備工作,以便更好地展開分析。將原始碼fork到自己的github倉庫中 git clone 自己的github vue 位址 dist 打包之後的結果 examples 示例 src compiler 編譯相關 core vue 核心庫 compo...
Vue原始碼分析 v model實現原理
最近小組有個關於vue原始碼分析的分享會,提前準備一下 前言 我們都知道使用v model可以實現資料的雙向繫結,及實現資料的變化驅動dom的更新,dom的更新影響資料的變化。那麼v model是怎麼實現這一原理的呢?接下來探索一下這部分的原始碼。gendirectives 在模板的編譯階段,v m...
Vue原始碼分析(流程分析)
使用步驟 1.編寫 頁面 模板 1.直接在html標籤中寫 2.使用template 3.使用單檔案 2.建立vue例項 1.在vue 的建構函式中 data,methods,computer,watcher,props,3.將vue掛載到頁面中 mount 資料驅動模型 vue執行流程 1.獲得模...