1 ,易用(使用成本低)
2 ,靈活(生態系統完善,試用於任何規模的專案)
3 ,高效(體積小,優化好,效能好)
vue是乙個mvvm的js 框架,但是,vue 的核心庫只關注檢視層,開發者關注的只是m-v的對映關係,也就是說我們就是關心的對映關係。
1 mvc的之間關係:通訊都是單向的。
view 傳送指令到controller,
controller完成業務邏輯之後要求model改變狀態
model 將新的資料傳送到view,使用者得到反饋
2 mvp之間的關係、:mvp模式將controller改名為presenter,同時改變了通訊方向。
各部分之間的通訊,都是雙向的
view與model不發生關係,通過presenter傳遞
view非常薄,不會部署任何業務邏輯,稱為「被動式圖」(passive view),既沒有任何主動性,而presenter非常厚,所有的業務邏輯都部署在這裡
3 mvvm 模式將presenter改名為viewmodel,基本上與mvp模式完全一致,唯一區別是,它採用的是雙向繫結(data-binding),view的變動,自動反應在viewmodel,反之亦然。angular和ember都採用這種模式
// 建立乙個vue的例項
// 宣告一條資料,然後用頁數的模板語法將其渲染到介面中 (宣告式渲染)
// el data methods是固定寫法
var vm=new vue(,
methods:
})**vue 中按照mvvm的架構去進行實現的
mvvm
m: model 模型
v: view 檢視
vm: viewmodel 檢視模型**
當model層的資料發生改變,為什麼vm就可以知道資料發生了變化
也就是說vue的雙向資料繫結原理是什麼:
1 vue在建立vm的時候,會將資料配置到例項中。然後通過 object.defineproperty 方法,
為資料動態的新增getter和setter方法
**(object.defineproperty(obj, prop, descriptor)**
obj:需要定義屬性的物件
prop:需要定義的屬性
descriptor:屬性的描述描述符
返回值:返回此物件)
2 當獲取資料的時候,會觸發對應的getter方法,當設定資料的時候,觸發對應的setter方法
3 然後當setter方法觸完成的時候,內部會進一步的觸發 watcher (觀察者),,當資料改變了,檢視則更新操作完畢。
// 建立vue例項
// 先在外部建立乙個data
// let data1=
// new vue()
// console.log(data1)//object
var obj = {}
// 設定乙個中間變數承接內容
let middel=100
object.defineproperty(obj, 'prop', ,
set(val)
})// 在這裡列印的順序是看自己是獲取還是設定
console.log(obj.prop)//獲取物件的屬性的時候,會呼叫自身的get方法
obj.prop=11 //設定物件的屬性的時候,會呼叫自身的set方法
// console.log(obj.prop)
Vue雙向繫結原理及vue cli
vue.js介紹 1.vue.js的mvvm框架 2.什麼是vue.js vue.js是乙個輕量級的mvvm框架 中文官網 3.對比react angular vue.js更輕量級,gzip只有20k vue.js更容易上手,學習曲線平穩 吸取兩家之長,借鑑了angular的指令和react的指令化...
vue雙向繫結原理及實現
資料雙向繫結原理簡單概括的話就是 view層影響model層是通過對 keyup 等事件的監聽。model層影響view層是通過object.defineproperty 方法劫持資料並結合發布訂閱者模式的方式來實現資料的雙向繫結。根據原理圖來介紹整個流程 1 首先使用object.definepr...
Vue雙向繫結
把乙個普通物件 a 傳給 vue 例項作為它的 data 選項,vue.js 將遍歷它的屬性,用object.defineproperty 將它們轉為 getter setter,如圖綠色的部分所示。每次使用者更改data裡的資料的時候,比如a.b 1,setter就會重新通知watcher進行變動...