天天看點

前端開發之走進 Vue.js

Vue.js作為目前最熱門最具前景的前端架構之一,其提供了一種幫助我們快速建構并開發前端項目的新的思維模式。本文旨在幫助大家認識Vue.js,了解Vue.js的開發流程,并進一步了解如何通過Vue.js來建構一個中大型的前端項目,同時做好相應的部署與優化工作。

文章将以PPT圖檔附加文字介紹的形式展開,不會涉及知識點的具體代碼,點到為止。有興趣的同學可以檢視相應的文檔進行了解。

Vue.js簡介

從上圖的介紹中我們不難發現Vue.js是一款輕量級的以資料驅動的前端JS架構,其和jQuery最大的不同點在于jQuery通過操作DOM來改變頁面的顯示,而Vue通過操作資料來實作頁面的更新與展示。下面便是Vue資料驅動的概念模型:

資料模型

Vue.js主要負責的是上圖綠色正方體ViewModel的部分,其在View層(即DOM層)與Model層(即JS邏輯層)之間通過ViewModel綁定了DOM Listeners與Data Bingings兩個相當于監聽器的東西。

當View層的視圖發生改變時,Vue會通過DOM Listeners來監聽并改變Model層的資料。相反,當Model層的資料發生改變時,其也會通過Data Bingings來監聽并改變View層的展示。這樣便實作了一個雙向資料綁定的功能,也是Vue.js資料驅動的原理所在。

Vue執行個體

前端開發之走進 Vue.js

在一個html檔案中,我們直接可以通過script标簽引入Vue.js,然後就可以在頁面裡寫Vue.js代碼了。上圖中我們通過new Vue()建構了一個Vue的執行個體,在執行個體中,可以包含挂在元素(el),資料(data),模闆(template),方法(methods)與生命周期鈎子(created等)等選項。不同的執行個體選項擁有不同的功能,如:

(1)el表明我們的Vue需要操作哪一個元素下的區域,'#demo'表示操作id為demo的元素下區域。

(2)data表示Vue 執行個體的資料對象,data 的屬性能夠響應資料的變化。

(3)created表示執行個體生命周期中建立完成的那一步,當執行個體已經建立完成之後将調用其方法。

Vue常用指令

前端開發之走進 Vue.js

在Vue項目的開發中,我們使用的最多的應該就屬Vue的指令了。通過Vue提供的常用指令,我們可以淋漓盡緻地發揮Vue資料驅動的強大功能。以下便是圖中常用指令的簡單介紹:

(1)v-text: 用于更新綁定元素中的内容,類似于jQuery的text()方法

(2)v-html: 用于更新綁定元素中的html内容,類似于jQuery的html()方法

(3)v-if: 用于根據表達式的值的真假條件渲染元素,如果上圖P3為false則不會渲染P标簽

(4)v-show: 用于根據表達式的值的真假條件顯示隐藏元素,切換元素的 display CSS 屬性

(5)v-for: 用于周遊資料渲染元素或模闆,如圖中P6為[1,2,3]則會渲染3個P标簽,内容依次為1,2,3

(6)v-on: 用于在元素上綁定事件,圖中在P标簽上綁定了showP3的點選事件

關于更多的Vue指令可以檢視Vue2.0文檔,位址:

vuefe.cn/api/#指令

Vue.js技術棧

以上我們講到可以直接在一個html頁面裡通過引入Vue.js來直接寫Vue代碼,但是這樣的方式并不常用。因為如果我們的項目比較大,項目中會存在很多頁面,一旦每個頁面都引入一個Vue.js或者聲明一個Vue執行個體,這樣非常不利于後期的維護和代碼的公用,也會存在執行個體名沖突的情況,是以我們需要用到Vue提供的技術棧來建構強大的前端項目。

除了Vue.js我們還需要用到:

(1)vue-cli:Vue的腳手架工具,用于自動生成Vue項目的目錄及檔案。

(2)vue-router: Vue提供的前端路由工具,利用其我們實作頁面的路由控制,局部重新整理及按需加載,建構單頁應用,實作前後端分離。

(3)vuex:Vue提供的狀态管理工具,用于同一管理我們項目中各種資料的互動和重用,存儲我們需要用到資料對象。

(4)ES6:Javascript的新版本,ECMAScript6的簡稱。利用ES6我們可以簡化我們的JS代碼,同時利用其提供的強大功能來快速實作JS邏輯。

(5)NPM:node.js的包管理工具,用于同一管理我們前端項目中需要用到的包、插件、工具、指令等,便于開發和維護。

(6)webpack:一款強大的檔案打包工具,可以将我們的前端項目檔案同一打包壓縮至js中,并且可以通過vue-loader等加載器實作文法轉化與加載。

(7)Babel:一款将ES6代碼轉化為浏覽器相容的ES5代碼的插件

利用以上等技術,我們便可以開始建構我們的Vue項目了。

建構大型應用

前端開發之走進 Vue.js

在建構我們的中大型Vue項目中,我們主要介紹如何利用vue-cli來自動生成我們項目的前端目錄及檔案,了解Vue中一切皆元件的概念及父子元件的通信問題,講解在Vue項目中我們如何使用第三方插件,最後利用webpack來打包及部署我們的項目。

vue-cli建構

前端開發之走進 Vue.js

在使用vue-cli之前我們需要安裝node.js,利用其提供的npm指令來安裝vue-cli。安裝node.js隻需去其官網下載下傳軟體并安裝即可,位址為:

nodejs.org/en/

安裝完成之後我們打開電腦的cmd指令行工具依次輸入上圖中的指令:

(1)npm install -g vue-cli:全局安裝vue-cli

(2)vue init webpack my-project: 利用vue-cli在目錄位址生成一個基于webpack的名為’my-project‘的Vue項目檔案及目錄

(3)cd my-project:打開剛剛建立的檔案夾

(4)npm intall:安裝項目所依賴的封包件

(5)npm run dev:利用本地node伺服器在浏覽器中打開并浏覽項目頁面

這樣我們的一個基于webpack的vue項目目錄就建構好了。

單檔案元件

在剛剛建構好的vue項目中,我們會發現一個App.vue和Hello.vue的檔案,那麼像這樣的以.vue字尾結尾的檔案便是我們Vue項目中常見的單檔案元件。單檔案元件包含了一個功能或子產品的html、js及css。在.vue檔案中,我們可以在template标簽中寫html,在script标簽中寫js,在style标簽中寫css。這樣一個功能或子產品就是一個.vue元件,對于元件公用和後期的維護也非常便捷。

父子元件通信

那麼像這樣在以單檔案元件為核心的項目開發中,我們一定會想到一個問題,就是.vue父子元件之間是如何交換資料來實作通信的呢?在Vue2.0中提供了props來實作父元件向子元件傳遞資料,通過$emit來實作子元件向父元件傳遞資料。當然如果是較為複雜和普遍的資料互動,建議大家使用vuex來同一管理資料。詳情請見:

vuefe.cn/guide/compo…

插件使用

接下來我們介紹下在基于webpack的vue項目中我們是如何使用插件的,主要有兩種情況:

(一)全局使用

(1)在index.html引入:這樣的方式不推薦使用,因為存在先後加載順序的問題,有些插件不支援這一方式。

(2)通過webpack配置檔案引入:主要通過plugin配置項的webpack.ProvidePlugin()方法實作,不過隻适合支援CommonJs規範并提供一個全局變量的插件,如jQuery中的$。

(3)通過import + Vue.use()引入:這種方式需要在全局.vue檔案中import需要加載的插件,然後通過Vue.use('插件變量名')來實作,不過此方法隻支援遵循Vue.js插件編寫規範的插件使用,如vue-resourece。

(二)單檔案使用

(1)通過import直接引入:這種方式可以在需要調用插件的.vue檔案中使用,不過需要注意和執行個體的建立順序問題,或者也可以通過require引入。

(2)import + components注冊:此方式為Vue元件的使用方式,可以在一個元件中注冊并使用一個子元件。

部署及優化

當我們搞定整個Vue項目的前端編碼階段後,我們需要對我們的前端項目檔案進行部署和優化工作,主要的幾個方式如下:

(1)使用webpack的DefinePlugin指定生産環境:通過plugin中的DefinePlugin配置,我們可以聲明'process.env'屬性為'development'(開發環境)或者'production'(生産環境),結合npm配置檔案package.json中scripts的指令來切換環境模式十分友善。

(2)使用UglifyJs自動删除代碼塊内的警告語句:一般在生産環境的webpack配置檔案中使用,通過new webpack.optimize.UglifyJsPlugin()來進行配置,删除警告語句可以縮減檔案的體積。

(3)使用Webpack hash處理緩存:當我們需要對釋出到線上的檔案進行修改時,重新編譯的檔案名如果和之前版本的相同會引起浏覽器無法識别而加載緩存檔案的問題。這樣我們需要自動的生成帶hash值的檔案名來阻止緩存。詳見:

segmentfault.com/a/119000000…

(4)使用v-if減少不必要的元件加載:v-if指令其實很有用處,它可以讓我們項目中暫時不需要的元件不進行渲染,等需要用到的時候在渲染,比如某個彈窗元件等。這樣我們可以減少頁面首次加載的時間和檔案量。

除了以上幾點的優化,還有很多優化選擇,有興趣的童鞋可以好好地了解下webpack的API文檔,畢竟webpack的功能十分強大。

資料驅動執行個體

前端開發之走進 Vue.js

這是我之前利用Vue.js資料驅動的原理寫的一個拼圖遊戲,希望能夠供大家進一步了解Vue資料驅動的理念。

示範位址:

拼圖遊戲

代碼位址:

拼圖代碼

總結

本文以PPT圖檔附加文字介紹的形式簡單介紹了Vue.js的知識點及開發流程,并将前端自動化、元件化、工程化的理念貫穿其中,由淺入深地闡述了Vue.js“簡單卻不失優雅,小巧而不發大匠”的獨特魅力。

原文釋出時間為:2016年10月31日

原文作者:掘金

本文來源: 

掘金 

如需轉載請聯系原作者

繼續閱讀