Vue (讀音 /vjuː/,相似於 view) 是一套用於構建用戶界面的漸進式框架,發佈於 2014 年 2 月。與其它大型框架不一樣的是,Vue 被設計爲能夠自底向上逐層應用。Vue 的核心庫只關注視圖層,不只易於上手,還便於與第三方庫(如:vue-router(頁面跳轉)
,,vue-resource
vuex(狀態管理框架)
)或既有項目整合。javascript
Axios
:前端通訊框架;由於 Vue
的邊界很明確,就是爲了處理 DOM,因此並不具有通訊能力,此時就須要額外使用一個通訊框架與服務器交互;固然也能夠直接選擇使用 jQuery 提供的 AJAX 通訊功能;在我看來,漸進式表明的含義是:主張最少。
每一個框架都不可避免會有本身的一些特色,從而會對使用者有必定的要求,這些要求就是主張,主張有強有弱,它的強勢程度會影響在業務開發中的使用方式。
好比說,Angular,它兩個版本都是強主張的,若是你用它,必須接受如下東西:
- 必須使用它的模塊機制- 必須使用它的依賴注入- 必須使用它的特殊形式定義組件(這一點每一個視圖框架都有,難以免)html
因此Angular是帶有比較強的排它性的,若是你的應用不是從頭開始,而是要不斷考慮是否跟其餘東西集成,這些主張會帶來一些困擾。前端
好比React,它也有必定程度的主張,它的主張主要是函數式編程的理念,好比說,你須要知道什麼是反作用,什麼是純函數,如何隔離反作用。它的侵入性看似沒有Angular那麼強,主要由於它是軟性侵入。vue
Vue可能有些方面是不如React,不如Angular,但它是漸進的,沒有強主張,你能夠在原有大系統的上面,把一兩個組件改用它實現,當jQuery用;也能夠整個用它全家桶開發,當Angular用;還能夠用它的視圖,搭配你本身設計的整個下層用。你能夠在底層數據邏輯的地方用OO和設計模式的那套理念,也能夠函數式,均可以,它只是個輕量視圖而已,只作了本身該作的事,沒有作不應作的事,僅此而已。
漸進式的含義,個人理解是:沒有多作職責以外的事。java
漸進式框架:Progressive,說明vue.js的輕量,是指一個前端項目可使用vue.js一兩個特性也能夠整個項目都用yue.js。
自底向上逐層應用:做爲漸進式框架要實現的目標就是方便項目增星開發。react
對於傳統的js,咱們只有MV,js操做dom(view)直接賦值模型屬性(model),咱們使用的ajax能夠經過後臺獲取數據,而後就須要操做dom,進行數據的賦值,此時model和view就出現了耦合webpack
而vue,添加了一個vm,將view和model進行隔離,vue.js充當了這個vm,vue.js使用本身的語法將model渲染到視圖中;ios
在 MVVM 架構中,是不容許 數據 和 視圖 直接通訊的,只能經過 ViewModel
來通訊,而 ViewModel 就是定義了一個 Observer
觀察者web
至此,咱們就明白了,Vue.js 就是一個 MVVM 的實現者,他的核心就是實現了 DOM 監聽
與 數據綁定
ajax
當你把一個普通的 JavaScript 對象傳給 Vue 實例的 data
選項,Vue 將遍歷此對象全部的屬性,並使用 Object.defineProperty
把這些屬性所有轉爲 getter/setter
。Object.defineProperty 是 ES5 中一個沒法 shim 的特性,這也就是爲何 Vue 不支持 IE8 以及更低版本瀏覽器。
這些 getter/setter 對用戶來講是不可見的,可是在內部它們讓 Vue 追蹤依賴,在屬性被訪問和修改時通知變化。這裏須要注意的問題是瀏覽器控制檯在打印數據對象時 getter/setter 的格式化並不一樣,因此你可能須要安裝 vue-devtools
來獲取更加友好的檢查接口。
每一個組件實例都有相應的 watcher 實例對象,它會在組件渲染的過程當中把屬性記錄爲依賴,以後當依賴項的 setter
被調用時,會通知 watcher
從新計算,從而導致它關聯的組件得以更新。
結合了react 的優勢,虛擬 DOM, 用於減小真實 DOM 操做,在內存中模擬 DOM 操做,有效的提高了前端渲染效率。
結合了Angular優勢。模塊化開發。