首頁>技術>

1 Vue.js是什麼

單獨來講,Vue.js被定義成一個用來開發Web介面的前端庫,是個非常輕量級的工具。Vue.js本身具有響應式程式設計和元件化的特點。

所謂響應式程式設計,即為保持狀態和檢視的同步,這個在大多數前端MV*(MVC/MVVM/MVW)框架,不管是早期的backbone.js還是現在AngularJS都對這一特性進行了實現(也稱之為資料繫結),但這幾者的實現方式和使用方式都不相同。相比而言,Vue.js使用起來更為簡單,也無需引入太多的新概念,宣告例項new Vue({ data : data })後自然對data裡面的資料進行了檢視上的繫結。修改data的資料,檢視中對應資料也會隨之更改。

Vue.js的元件化理念和ReactJS異曲同工——“一切都是元件”,可以將任意封裝好的程式碼註冊成標籤,例如:Vue.component('example', Example),可以在模板中以的形式呼叫。如果元件抽象得合理,這在很大程度上能減少重複開發,而且配合Vue.js的周邊工具vue-loader,我們可以將一個元件的CSS、HTML和js都寫在一個檔案裡,做到模組化的開發。

除此之外,Vue.js也可以和一些周邊工具配合起來,例如vue-router和vue-resource,支援了路由和非同步請求,這樣就滿足了開發單頁面應用的基本條件。

2 為什麼要用Vue.js

相比較Angularjs和ReactJS,Vue.js一直以輕量級,易上手被稱道。MVVM的開發模式也使前端從原先的DOM操作中解放出來,我們不再需要在維護檢視和資料的統一上花大量的時間,只需要關注於data的變化,程式碼變得更加容易維護。雖然社群和外掛並沒有一些老牌的開源專案那麼豐富,但滿足日常的開發是沒有問題的。Vue.js 2.0也已經發布了beta版本,渲染層基於一個輕量級的 virtual-DOM 實現,在大多數場景下初始化渲染速度和記憶體消耗都提升了 2~4 倍。而阿里也開源了weex(可以理解成ReactJS-Native和ReacJS的關係),這也意味著Vue.js在移動端有了更多的可能性。

不過,對於為什麼要選擇使用一個框架,都需要建立在一定的專案基礎上。如果脫離實際專案情況我們來談某個框架的優劣,以及是否採用這種框架,我覺得是不夠嚴謹的。

作為新興的前端框架,Vue.js也拋棄了對IE8的支援,在移動端支援到Android 4.2+和iOS 7+。所以如果你在一家比較傳統,還需要支援IE6的公司的話,你或許就可以考慮其他的解決方案了(或者說服你的老闆)。另外,在傳統的前後端混合(通過後端模板引擎渲染)的專案中,Vue.js也會受到一定的限制,Vue例項只能和後端模板檔案混合在一起,獲取的資料也需要依賴於後端的渲染,這在處理一些JSON物件和陣列的時候會有些麻煩。

理想狀態下,我們能直接在前後端分離的新專案中使用Vue.js最合適。這能最大程度上發揮Vue.js的優勢和特性,熟悉後能極大的提升我們的開發效率以及程式碼的複用率。尤其是移動瀏覽器上,Vue.js壓縮後只有18KB,而且沒有其他的依賴。

3 Vue.js的Hello world

現在來看一下我們第一個Vue.js專案,按照傳統,我們來寫一個Hello World。

首先,引入Vue.js的方式有很多,你可以採用直接使用CDN,例如:

<script src='http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js'></script>

也可以透過NPM進行安裝:

npm install vue // 最新穩定版本

正確引入Vue.js之後,我們在HTML檔案中的內容為:

<div id="app"> <h1>{{message}}</h1></div>

應用的js如下:

var vm = new Vue({ el : '#app', data: {  message : 'Hello world, I am Vue.js' }});

輸出結果為:

這種形式類似於前端模板引擎,我們把js中message值替換了HTML模板中{{message}}這部分。

不過,如果僅僅是這樣的例子,我相信你也不會有什麼興趣去使用Vue.js。根據上文對Vue.js的說明,我們繼續寫兩個有關於它特性的例子。

第一個特性是資料繫結,我們可以在執行上述例子的瀏覽器控制檯(console)環境中輸入vm.message = 'Hello Vue.js',輸出結果就變為了Hello Vue.js。也就說明vm.message和檢視中的{{message}}是繫結的,我們無需手動去獲取<h1>標籤來修改裡面的innerHTML。

同樣,我們也可以繫結使用者輸入的資料,檢視會隨著使用者的輸入而變化,例如:

<div id="app"> <h1>Your input is {{ message }}</h1> <input type=”text” v-model=”message”></div>

vm.message的值會隨著使用者在input中輸入的值的變化而變化,而無需我們手動去獲取DOM元素的值再同步到js中。

第二個特性是元件化,簡單來說我們可以自己定義HTML標籤,並在模板中使用它,例如:

<div id="app"> <message content='Hello World'></message></div> <script type="text/javascript"> var Message = Vue.extend({  props : ['content'],  template : '<h1>{{content}}</h1>' }) Vue.component('message', Message); var vm = new Vue({  el : '#app', });</script>

我們在瀏覽器裡最終看到的HTML結果為:

可以看到自定義的標籤<message>被替換成了<h1>Hello World</h1>,當然,實際中的元件化遠比示例複雜,我們會給元件新增引數及方法,使之能更好地被複用。

如果說這幾個例子引起了你對Vue.js的興趣的話,那接下來就將它真實地運用到生產環境中吧。

本文節選自《Vue.js 前端開發 快速入門與專業應用》

內容簡介

本書主要介紹Vue.js的使用方法和在實際專案中的運用,它既可以在一個頁面中單獨使用,也可以將整站都構建成單頁面應用。為了便於理解,本書會從傳統的開發角度切入,先從資料渲染、事件繫結等方面介紹在Vue.js中的使用方法,然後漸進到Vue.js自身的特性,例如資料繫結、過濾器、指令以及最重要的元件部分。除了框架用法外,本書還介紹了和Vue.js相關的重要外掛和構建工具,這些工具有助於幫助使用者構建一個完整的單頁面應用,而不僅僅是停留在個人DEMO階段的試驗品。而對於複雜專案,Vue.js也提供了對應的狀態管理工具Vuex,降低專案的開發和維護成本。鑑於完稿前,Vue.js 2.0已正式釋出完畢,本書也在相關用法上對比了1.0和2.0的區別,並補充了render函式和服務端渲染等特性。

本書適用於尚未接觸過MVVM類前端框架的開發者,或者初步接觸Vue.js的開發者,以及實際應用Vue.js開發專案的開發者。

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Linux下一鍵安裝java-jdk任意版本