MVVM極易理解版

2021-09-11 09:59:34 字數 1947 閱讀 5024

前段時間面試,mvvm原理成為了一道必考題。由於理解不夠深,最近詳細了解以結構圖流程分析原理。

var vm = new mvvm(

}});複製**

class mvvm ;

var data = this._data = this.$options.data;

object.keys(data).foreach(key => )

//資料劫持

observe(data, this);

//編譯

this.$compile = new compile(options.el || document.body, this);

}_proxydata(key, setter, getter) ,

set: function proxysetter(newval) })}

}複製**

class compile 

}node2fragment(el) ;

return fragment;

}init

() compileelement(el) \}/;

if(this.iselementnode(node))else

if(this.istextnode(node) && reg.test(text))

if(node.childnodes && node.childnodes.length)})}

compile(node)else

node.removeattribute(attrname);}})

}isdirective(attr)

iseventdirective(attr)

iselementnode(node)

istextnode(node)

compiletext(node, exp)

}//指令處理集合

var compileutil =

var updater =

複製**

//資料劫持

class observer

walk(data) )

}convert(key, val)

//繫結資料,新增發布訂閱,核心**

definereactive(data, key, val)

return val;

},set: function(newval)

val = newval;

// 新的值object的話,進行監聽

childobj = observe(newval);

console.log(newval);

//通知訂閱者

dep.notify();}})

}}function observe(value, vm)

return new observer(value);

}複製**

var uid = 0;

class dep

addsub(sub)

depend

() removesub(sub)

notify

() )

}}dep.target = null;

複製**

class watcher;

if(typeof exporfn === 'function') else

this.value = this.get();

}update

() run

() }

get() parsegetter(exp)

return obj;}}

adddep(dep)

}}複製**

MVVM模式理解

mvvm 是 model view viewmodel 的縮寫。model代表資料模型,也可以在model中定義資料修改和操作的業務邏輯。view代表ui 元件,它負責將資料模型轉化成ui 展現出來。viewmodel監聽模型資料的改變和控制檢視行為 處理使用者互動,簡單理解就是乙個同步view 和...

對於MVVM的理解

參考 一 mvvm 分為3個模組 1.view 2.viewmodel 3.model 關係為 二 mvvm出現的原因 傳統mvc模式中controller中做了太多的資料加工的事情,隨著軟體規模的增長,越來越不好維護。越來越不好測試。所以mvvm把資料加工的任務從controller中解放了出來。...

簡單理解MVVM模式

mvvm是model view viewmodel的簡稱,是一種前端開發的架構模式,其核心是資料的雙向繫結。在mvvm中viewmodel 通過雙向資料繫結把 view 層和 model 層連線了起來,而view 和 model 之間的同步工作完全是自動的,無需人為干涉,我們不需要再手動操作dom,...