摘要:作為目前最熱門(mén)最具前景的前端框架之一,其提供了一種幫助我們快速構(gòu)建并開(kāi)發(fā)前端項(xiàng)目的新的思維模式。的新版本,的簡(jiǎn)稱(chēng)。的包管理工具,用于同一管理我們前端項(xiàng)目中需要用到的包插件工具命令等,便于開(kāi)發(fā)和維護(hù)。
Vue.js作為目前最熱門(mén)最具前景的前端框架之一,其提供了一種幫助我們快速構(gòu)建并開(kāi)發(fā)前端項(xiàng)目的新的思維模式。本文旨在幫助大家認(rèn)識(shí)Vue.js,了解Vue.js的開(kāi)發(fā)流程,并進(jìn)一步理解如何通過(guò)Vue.js來(lái)構(gòu)建一個(gè)中大型的前端項(xiàng)目,同時(shí)做好相應(yīng)的部署與優(yōu)化工作
Vue.js簡(jiǎn)介
從上圖的介紹中我們不難發(fā)現(xiàn)Vue.js是一款輕量級(jí)的以數(shù)據(jù)驅(qū)動(dòng)的前端JS框架,其和jQuery最大的不同點(diǎn)在于jQuery通過(guò)操作DOM來(lái)改變頁(yè)面的顯示,而Vue通過(guò)操作數(shù)據(jù)來(lái)實(shí)現(xiàn)頁(yè)面的更新與展示。下面便是Vue數(shù)據(jù)驅(qū)動(dòng)的概念模型:
Vue.js主要負(fù)責(zé)的是上圖綠色正方體ViewModel的部分,其在View層(即DOM層)與Model層(即JS邏輯層)之間通過(guò)ViewModel綁定了DOM Listeners與Data Bingings兩個(gè)相當(dāng)于監(jiān)聽(tīng)器的東西。
當(dāng)View層的視圖發(fā)生改變時(shí),Vue會(huì)通過(guò)DOM Listeners來(lái)監(jiān)聽(tīng)并改變Model層的數(shù)據(jù)。相反,當(dāng)Model層的數(shù)據(jù)發(fā)生改變時(shí),其也會(huì)通過(guò)Data Bingings來(lái)監(jiān)聽(tīng)并改變View層的展示。這樣便實(shí)現(xiàn)了一個(gè)雙向數(shù)據(jù)綁定的功能,也是Vue.js數(shù)據(jù)驅(qū)動(dòng)的原理所在。
在一個(gè)html文件中,我們直接可以通過(guò)script標(biāo)簽引入Vue.js,然后就可以在頁(yè)面里寫(xiě)Vue.js代碼了。上圖中我們通過(guò)new Vue()構(gòu)建了一個(gè)Vue的實(shí)例,在實(shí)例中,可以包含掛在元素(el),數(shù)據(jù)(data),模板(template),方法(methods)與生命周期鉤子(created等)等選項(xiàng)。不同的實(shí)例選項(xiàng)擁有不同的功能,如:
(1)el表明我們的Vue需要操作哪一個(gè)元素下的區(qū)域,"#demo"表示操作id為demo的元素下區(qū)域。
(2)data表示Vue 實(shí)例的數(shù)據(jù)對(duì)象,data 的屬性能夠響應(yīng)數(shù)據(jù)的變化。
(3)created表示實(shí)例生命周期中創(chuàng)建完成的那一步,當(dāng)實(shí)例已經(jīng)創(chuàng)建完成之后將調(diào)用其方法。
Vue.js技術(shù)棧
以上我們講到可以直接在一個(gè)html頁(yè)面里通過(guò)引入Vue.js來(lái)直接寫(xiě)Vue代碼,但是這樣的方式并不常用。因?yàn)槿绻覀兊捻?xiàng)目比較大,項(xiàng)目中會(huì)存在很多頁(yè)面,一旦每個(gè)頁(yè)面都引入一個(gè)Vue.js或者聲明一個(gè)Vue實(shí)例,這樣非常不利于后期的維護(hù)和代碼的公用,也會(huì)存在實(shí)例名沖突的情況,所以我們需要用到Vue提供的技術(shù)棧來(lái)構(gòu)建強(qiáng)大的前端項(xiàng)目。
除了Vue.js我們還需要用到:
(1)vue-cli:Vue的腳手架工具,用于自動(dòng)生成Vue項(xiàng)目的目錄及文件。
(2)vue-router: Vue提供的前端路由工具,利用其我們實(shí)現(xiàn)頁(yè)面的路由控制,局部刷新及按需加載,構(gòu)建單頁(yè)應(yīng)用,實(shí)現(xiàn)前后端分離。
(3)vuex:Vue提供的狀態(tài)管理工具,用于同一管理我們項(xiàng)目中各種數(shù)據(jù)的交互和重用,存儲(chǔ)我們需要用到數(shù)據(jù)對(duì)象。
(4)ES6:Javascript的新版本,ECMAScript6的簡(jiǎn)稱(chēng)。利用ES6我們可以簡(jiǎn)化我們的JS代碼,同時(shí)利用其提供的強(qiáng)大功能來(lái)快速實(shí)現(xiàn)JS邏輯。
(5)NPM:node.js的包管理工具,用于同一管理我們前端項(xiàng)目中需要用到的包、插件、工具、命令等,便于開(kāi)發(fā)和維護(hù)。
(6)webpack:一款強(qiáng)大的文件打包工具,可以將我們的前端項(xiàng)目文件同一打包壓縮至js中,并且可以通過(guò)vue-loader等加載器實(shí)現(xiàn)語(yǔ)法轉(zhuǎn)化與加載。
(7)Babel:一款將ES6代碼轉(zhuǎn)化為瀏覽器兼容的ES5代碼的插件
利用以上等技術(shù),我們便可以開(kāi)始構(gòu)建我們的Vue項(xiàng)目了。
構(gòu)建大型應(yīng)用
在構(gòu)建我們的中大型Vue項(xiàng)目中,我們主要介紹如何利用vue-cli來(lái)自動(dòng)生成我們項(xiàng)目的前端目錄及文件,了解Vue中一切皆組件的概念及父子組件的通信問(wèn)題,講解在Vue項(xiàng)目中我們?nèi)绾问褂玫谌讲寮詈罄脀ebpack來(lái)打包及部署我們的項(xiàng)目。
vue-cli構(gòu)建
在使用vue-cli之前我們需要安裝node.js,利用其提供的npm命令來(lái)安裝vue-cli。安裝node.js只需去其官網(wǎng)下載軟件并安裝即可,地址為:https://nodejs.org/en/
安裝完成之后我們打開(kāi)電腦的cmd命令行工具依次輸入上圖中的命令:
(1)npm install -g vue-cli:全局安裝vue-cli
(2)vue init webpack my-project: 利用vue-cli在目錄地址生成一個(gè)基于webpack的名為’my-project‘的Vue項(xiàng)目文件及目錄
(3)cd my-project:打開(kāi)剛剛創(chuàng)建的文件夾
(4)npm intall:安裝項(xiàng)目所依賴(lài)的包文件
(5)npm run dev:利用本地node服務(wù)器在瀏覽器中打開(kāi)并瀏覽項(xiàng)目頁(yè)面
這樣我們的一個(gè)基于webpack的vue項(xiàng)目目錄就構(gòu)建好了。
單文件組件
在剛剛構(gòu)建好的vue項(xiàng)目中,我們會(huì)發(fā)現(xiàn)一個(gè)App.vue和Hello.vue的文件,那么像這樣的以.vue后綴結(jié)尾的文件便是我們Vue項(xiàng)目中常見(jiàn)的單文件組件。單文件組件包含了一個(gè)功能或模塊的html、js及css。在.vue文件中,我們可以在template標(biāo)簽中寫(xiě)html,在script標(biāo)簽中寫(xiě)js,在style標(biāo)簽中寫(xiě)css。這樣一個(gè)功能或模塊就是一個(gè).vue組件,對(duì)于組件公用和后期的維護(hù)也非常便捷。
父子組件通信
父子組件通信
那么像這樣在以單文件組件為核心的項(xiàng)目開(kāi)發(fā)中,我們一定會(huì)想到一個(gè)問(wèn)題,就是.vue父子組件之間是如何交換數(shù)據(jù)來(lái)實(shí)現(xiàn)通信的呢?在Vue2.0中提供了props來(lái)實(shí)現(xiàn)父組件向子組件傳遞數(shù)據(jù),通過(guò)$emit來(lái)實(shí)現(xiàn)子組件向父組件傳遞數(shù)據(jù)。當(dāng)然如果是較為復(fù)雜和普遍的數(shù)據(jù)交互,建議大家使用vuex來(lái)同一管理數(shù)據(jù)。詳情請(qǐng)見(jiàn)vue官網(wǎng)
插件使用
接下來(lái)我們介紹下在基于webpack的vue項(xiàng)目中我們是如何使用插件的,主要有兩種情況:
(一)全局使用
(1)在index.html引入:這樣的方式不推薦使用,因?yàn)榇嬖谙群蠹虞d順序的問(wèn)題,有些插件不支持這一方式。
(2)通過(guò)webpack配置文件引入:主要通過(guò)plugin配置項(xiàng)的webpack.ProvidePlugin()方法實(shí)現(xiàn),不過(guò)只適合支持CommonJs規(guī)范并提供一個(gè)全局變量的插件,如jQuery中的$。
(3)通過(guò)import + Vue.use()引入:這種方式需要在全局.vue文件中import需要加載的插件,然后通過(guò)Vue.use("插件變量名")來(lái)實(shí)現(xiàn),不過(guò)此方法只支持遵循Vue.js插件編寫(xiě)規(guī)范的插件使用,如vue-resourece。
(二)單文件使用
(1)通過(guò)import直接引入:這種方式可以在需要調(diào)用插件的.vue文件中使用,不過(guò)需要注意和實(shí)例的創(chuàng)建順序問(wèn)題,或者也可以通過(guò)require引入。
(2)import + components注冊(cè):此方式為Vue組件的使用方式,可以在一個(gè)組件中注冊(cè)并使用一個(gè)子組件。
部署及優(yōu)化
當(dāng)我們搞定整個(gè)Vue項(xiàng)目的前端編碼階段后,我們需要對(duì)我們的前端項(xiàng)目文件進(jìn)行部署和優(yōu)化工作,主要的幾個(gè)方式如下:
(1)使用webpack的DefinePlugin指定生產(chǎn)環(huán)境:通過(guò)plugin中的DefinePlugin配置,我們可以聲明"process.env"屬性為"development"(開(kāi)發(fā)環(huán)境)或者"production"(生產(chǎn)環(huán)境),結(jié)合npm配置文件package.json中scripts的命令來(lái)切換環(huán)境模式十分方便。
(2)使用UglifyJs自動(dòng)刪除代碼塊內(nèi)的警告語(yǔ)句:一般在生產(chǎn)環(huán)境的webpack配置文件中使用,通過(guò)new webpack.optimize.UglifyJsPlugin()來(lái)進(jìn)行配置,刪除警告語(yǔ)句可以縮減文件的體積。
(3)使用Webpack hash處理緩存:當(dāng)我們需要對(duì)發(fā)布到線(xiàn)上的文件進(jìn)行修改時(shí),重新編譯的文件名如果和之前版本的相同會(huì)引起瀏覽器無(wú)法識(shí)別而加載緩存文件的問(wèn)題。這樣我們需要自動(dòng)的生成帶hash值的文件名來(lái)阻止緩存。詳見(jiàn):https://segmentfault.com/a/11...
(4)使用v-if減少不必要的組件加載:v-if指令其實(shí)很有用處,它可以讓我們項(xiàng)目中暫時(shí)不需要的組件不進(jìn)行渲染,等需要用到的時(shí)候在渲染,比如某個(gè)彈窗組件等。這樣我們可以減少頁(yè)面首次加載的時(shí)間和文件量。
除了以上幾點(diǎn)的優(yōu)化,還有很多優(yōu)化選擇,有興趣的童鞋可以好好地了解下webpack的API文檔,畢竟webpack的功能十分強(qiáng)大。
總結(jié)
本次教程介紹的形式簡(jiǎn)單介紹了Vue.js的知識(shí)點(diǎn)及開(kāi)發(fā)流程,并將前端自動(dòng)化、組件化、工程化的理念貫穿其中,簡(jiǎn)單的介紹了Vue.js,以后還會(huì)寫(xiě)一些關(guān)于vue全家桶的文章跟大家一起探討和學(xué)習(xí)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82172.html
摘要:前端日?qǐng)?bào)精選中的生命周期函數(shù)淺談圖像優(yōu)化強(qiáng)推見(jiàn)效表示使用率不斷升高認(rèn)識(shí)屏幕加載骨架專(zhuān)題系列二十篇正式完結(jié)中文插件使用在中實(shí)現(xiàn)下拉加載數(shù)據(jù),瀑布流,詳細(xì)操作前端學(xué)習(xí)分鐘前端國(guó)際化掘金周刊盒模型詳解掘金,從玩玩具的心態(tài)開(kāi)始,到打 2017-10-25 前端日?qǐng)?bào) 精選 React中的async/await生命周期函數(shù)淺談Web圖像優(yōu)化強(qiáng)推 HTTPS 見(jiàn)效?Google 表示 HTTPS 使...
摘要:官網(wǎng)地址聊天機(jī)器人插件開(kāi)發(fā)實(shí)例教程一創(chuàng)建插件在系統(tǒng)技巧使你的更加專(zhuān)業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。我會(huì)簡(jiǎn)單基于的簡(jiǎn)潔視頻播放器組件前端掘金使用和實(shí)現(xiàn)購(gòu)物車(chē)場(chǎng)景前端掘金本文是上篇文章的序章,一直想有機(jī)會(huì)再次實(shí)踐下。 2道面試題:輸入U(xiǎn)RL按回車(chē)&HTTP2 - 掘金通過(guò)幾輪面試,我發(fā)現(xiàn)真正那種問(wèn)答的技術(shù)面,寫(xiě)一堆項(xiàng)目真不如去刷技術(shù)文章作用大,因此刷了一段時(shí)間的博客和掘金,整理下曾經(jīng)被...
摘要:前端日?qǐng)?bào)精選借助和緩存及離線(xiàn)開(kāi)發(fā)中和走進(jìn)之實(shí)現(xiàn)分析總是一知半解的中個(gè)常見(jiàn)的陷阱發(fā)布核心成員發(fā)布了免費(fèi)的學(xué)習(xí)視頻中文譯的函數(shù)式編程是一種反模式掘金譯更好的表單設(shè)計(jì)每一頁(yè),一件事實(shí)例研究掘金打印龍墨并不簡(jiǎn)單結(jié)合實(shí)現(xiàn)簡(jiǎn)單的加載動(dòng)畫(huà) 2017-07-12 前端日?qǐng)?bào) 精選 借助Service Worker和cacheStorage緩存及離線(xiàn)開(kāi)發(fā)JavaScript中toString()和valu...
摘要:自適應(yīng)的橢圓背景知識(shí)屬性的基本用法使用樣式畫(huà)各種圖形前端掘金下面是一些我在中經(jīng)常用到的圖案,還有一些是在看到的。像圖手把手教你使用前端掘金使用教程一是什么是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。 如何在 Vue.js 中使用第三方庫(kù) - 前端 - 掘金在諸多 Vue.js 應(yīng)用中, Lodash, Moment, Axios, Async等都是一些非常有用的 JavaScript 庫(kù)....
摘要:自適應(yīng)的橢圓背景知識(shí)屬性的基本用法使用樣式畫(huà)各種圖形前端掘金下面是一些我在中經(jīng)常用到的圖案,還有一些是在看到的。像圖手把手教你使用前端掘金使用教程一是什么是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。 如何在 Vue.js 中使用第三方庫(kù) - 前端 - 掘金在諸多 Vue.js 應(yīng)用中, Lodash, Moment, Axios, Async等都是一些非常有用的 JavaScript 庫(kù)....
閱讀 2918·2021-10-19 10:09
閱讀 3140·2021-10-09 09:41
閱讀 3388·2021-09-26 09:47
閱讀 2698·2019-08-30 15:56
閱讀 603·2019-08-29 17:04
閱讀 992·2019-08-26 11:58
閱讀 2514·2019-08-26 11:51
閱讀 3364·2019-08-26 11:29