【分享】Vue.js新手入門(mén)指南

圖片發(fā)自簡(jiǎn)書(shū)App


最近在逛各大網(wǎng)站,論壇躁倒,以及像SegmentFault等編程問(wèn)答社區(qū)荞怒,發(fā)現(xiàn)Vue.js異澈肿溃火爆象迎,重復(fù)性的提問(wèn)和內(nèi)容也很多荧嵌,樓主自己也趁著這個(gè)大前端的熱潮砾淌,著手學(xué)習(xí)了一段時(shí)間的Vue.js,目前用它正在做自己的結(jié)業(yè)項(xiàng)目拇舀。


在做的過(guò)程中也對(duì)Vue.js的官方文檔以及其各種特性有了許多認(rèn)識(shí)逻族。作為一個(gè)之前以PHP+模版引擎為主的開(kāi)發(fā)聘鳞,從一個(gè)從未接觸過(guò)除HTML+CSS+JavaScript+JQuery以外的前端技術(shù)的人到現(xiàn)在可以獨(dú)立使用Vue.js以及各種附屬的UI庫(kù)來(lái)開(kāi)發(fā)項(xiàng)目要拂,我總結(jié)了一些知識(shí)和經(jīng)驗(yàn)想與大家分享脱惰。


下面我就以問(wèn)答的形式來(lái)分享吧。這里假設(shè)你僅僅只掌握了HTML+CSS+JavaScript采盒,如果你對(duì)JQuery這個(gè)前端庫(kù)磅氨,以及各種后端模版語(yǔ)言比如說(shuō)PHP烦租,JSP還有所了解并且使用過(guò)的話那就太好了叉橱。


1.Vue.js是什么窃祝?


Vue.js(讀音 /vju/, 類(lèi)似于 view) 是一套構(gòu)建用戶界面的 漸進(jìn)式框架踱侣。與其他重量級(jí)框架不同的是,Vue 采用自底向上增量開(kāi)發(fā)的設(shè)計(jì)量没。Vue 的核心庫(kù)只關(guān)注視圖層殴蹄,并且非常容易學(xué)習(xí)猾担,非常容易與其它庫(kù)或已有項(xiàng)目整合绑嘹。另一方面窗怒,Vue 完全有能力驅(qū)動(dòng)采用單文件組件和 Vue 生態(tài)系統(tǒng)支持的庫(kù)開(kāi)發(fā)的復(fù)雜單頁(yè)應(yīng)用擅腰。

Vue.js 的目標(biāo)是通過(guò)盡可能簡(jiǎn)單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件趁冈。

如果你是有經(jīng)驗(yàn)的前端開(kāi)發(fā)者渗勘,想知道 Vue.js 與其它庫(kù)/框架的區(qū)別旺坠,查看對(duì)比其它框架。


這是官網(wǎng)的介紹申眼,是不是覺(jué)得非常的抽象非常的官方?看完之后可能還是有很多人不是很懂這個(gè)框架到底是用來(lái)做什么的病毡,什么是“漸進(jìn)式框架”啦膜?什么是“自底向上增量開(kāi)發(fā)”?什么是“視圖層”雀摘?什么是“單文件組件”阵赠?什么是“復(fù)雜的單頁(yè)應(yīng)用清蚀?”第二段話里面“響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件”這又是個(gè)啥爹谭?還有最后一段話诺凡,“Vue.js 與其它庫(kù)/框架的區(qū)別”究竟是什么绑洛?


不要擔(dān)心真屯,如果你慢慢看完這里面的所有問(wèn)答绑蔫,一定會(huì)對(duì)前面那些可能你從未聽(tīng)說(shuō)過(guò)的專(zhuān)業(yè)術(shù)語(yǔ)有一種恍然大悟的感覺(jué)。


2.Vue.js到底是什么携添?


想必現(xiàn)在能看到我這篇文章的人烈掠,都是用著APP或者網(wǎng)頁(yè)版知乎在閱讀把左敌。Vue.js就是一個(gè)用于搭建類(lèi)似于網(wǎng)頁(yè)版知乎這種表單項(xiàng)繁多矫限,且內(nèi)容需要根據(jù)用戶的操作進(jìn)行修改的網(wǎng)頁(yè)版應(yīng)用叼风。


3.單頁(yè)應(yīng)用程序(SPA)

顧名思義,單頁(yè)應(yīng)用一般指的就是一個(gè)頁(yè)面就是應(yīng)用茵汰,當(dāng)然也可以是一個(gè)子應(yīng)用经窖,比如說(shuō)知乎的一個(gè)頁(yè)面就可以視為一個(gè)子應(yīng)用画侣。單頁(yè)應(yīng)用程序中一般交互處理非常多配乱,而且頁(yè)面中的內(nèi)容需要根據(jù)用戶的操作動(dòng)態(tài)變化皮迟。

4.你前面說(shuō)的網(wǎng)頁(yè)版知乎我也可以用JQuery寫(xiě)啊伏尼,為什么要用Vue.js呢爆阶?

講到JQuery辨图,就不得不說(shuō)到JavaScript的DOM操作了故河。如果你用JQuery來(lái)開(kāi)發(fā)一個(gè)知乎,那么你就需要用JQuery中的各種DOM操作方法去操作HTML的DOM結(jié)構(gòu)了理盆。

現(xiàn)在我們把一個(gè)網(wǎng)頁(yè)應(yīng)用抽象一下猿规,那么HTML中的DOM其實(shí)就是視圖坎拐,一個(gè)網(wǎng)頁(yè)就是通過(guò)DOM的組合與嵌套哼勇,形成了最基本的視圖結(jié)構(gòu)积担,再通過(guò)CSS的修飾猬仁,在基本的視圖結(jié)構(gòu)上“化妝”讓他們看起來(lái)更加美觀湿刽。最后涉及到交互部分诈闺,就需要用到JavaScript來(lái)接受用戶的交互請(qǐng)求雅镊,并且通過(guò)事件機(jī)制來(lái)響應(yīng)用戶的交互操作仁烹,并且在事件的處理函數(shù)中進(jìn)行各種數(shù)據(jù)的修改卓缰,比如說(shuō)修改某個(gè)DOM中的innerHTML或者innerText部分征唬。

我們把HTML中的DOM就可以與其他的部分獨(dú)立開(kāi)來(lái)劃分出一個(gè)層次鳍鸵,這個(gè)層次就叫做視圖層偿乖。

Vue 的核心庫(kù)只關(guān)注視圖層

我們?yōu)槭裁匆岩晥D層抽取出來(lái)并且單獨(dú)去關(guān)注它呢?

因?yàn)樵谙裰踹@種頁(yè)面元素非常多媳禁,結(jié)構(gòu)很龐大的網(wǎng)頁(yè)中竣稽,數(shù)據(jù)和視圖如果全部混雜在一起毫别,像傳統(tǒng)開(kāi)發(fā)一樣全部混合在HTML中岛宦,那么要對(duì)它們進(jìn)行處理會(huì)十分的費(fèi)勁砾肺,并且如果其中有幾個(gè)結(jié)構(gòu)之間存在藕斷絲連的關(guān)系变汪,那么會(huì)導(dǎo)致代碼上出現(xiàn)更大的問(wèn)題裙盾,這什么問(wèn)題呢闷煤?

你是否還記得你當(dāng)初寫(xiě)JQuery的時(shí)候鲤拿,有寫(xiě)過(guò)$('#xxx').parent().parent().parent()這種代碼呢近顷?當(dāng)你第一次寫(xiě)的時(shí)候窒升,你覺(jué)得頁(yè)面元素不多饱须,不就是找這個(gè)元素的爸爸的爸爸的爸爸嗎,我大不了在注釋里面寫(xiě)清楚這個(gè)元素的爸爸的爸爸的爸爸不就好了譬挚。但是萬(wàn)一過(guò)幾天之后你的項(xiàng)目組長(zhǎng)或者你的產(chǎn)品經(jīng)理突然對(duì)你做的網(wǎng)頁(yè)提出修改要求减宣,這個(gè)修改要求將會(huì)影響頁(yè)面的結(jié)構(gòu)漆腌,也就是DOM的關(guān)聯(lián)與嵌套層次要發(fā)生改變闷尿,那么$('#xxx').parent().parent().parent()可能就會(huì)變成$('#xxx').parent().parent().parent().parent().parent()了悠砚。

這還不算什么灌旧,等以后產(chǎn)品迭代越來(lái)越快枢泰,修改越來(lái)越多衡蚂,而且頁(yè)面中類(lèi)似的關(guān)聯(lián)和嵌套DOM元素不止一個(gè)毛甲,那么修改起來(lái)將非常費(fèi)勁玻募。而且JQuery選擇器查找頁(yè)面元素以及DOM操作本身也是有性能損失的七咧,可能到時(shí)候打開(kāi)這個(gè)頁(yè)面艾栋,會(huì)變得越來(lái)越卡蝗砾,而你卻無(wú)從下手遥诉。

當(dāng)你在編寫(xiě)項(xiàng)目的時(shí)候遇到了這種問(wèn)題矮锈,你一定會(huì)抱怨苞笨,為什么世上會(huì)有HTML這種像盜夢(mèng)空間一樣的需要無(wú)數(shù)div嵌套才能做出頁(yè)面的語(yǔ)言瀑凝,為什么當(dāng)初學(xué)JQuery看中的是它簡(jiǎn)潔的DOM操作粤咪,現(xiàn)在卻一點(diǎn)也不覺(jué)得它有多簡(jiǎn)潔寥枝,難道我學(xué)的是假的JQuery囊拜?為什么寫(xiě)個(gè)代碼這么難冠跷,你想砸電腦蜜托,你想一鍵盤(pán)拍在產(chǎn)品狗的腦袋上橄务,責(zé)怪他天天改需求才讓你原本花清香茶清味的代碼變得如此又臭又長(zhǎng)仪糖。

這個(gè)時(shí)候如果你學(xué)過(guò)Vue.js攒驰,那么這些抱怨將不復(fù)存在玻粪。

5.Vue.js為什么能讓基于網(wǎng)頁(yè)的前端應(yīng)用程序開(kāi)發(fā)起來(lái)這么方便劲室?

因?yàn)閂ue.js有聲明式很洋,響應(yīng)式的數(shù)據(jù)綁定喉磁,與組件化的開(kāi)發(fā)协怒,并且還使用了Virtual DOM這個(gè)看名字就覺(jué)得高大上的技術(shù)孕暇。

可是這些名詞都是啥妖滔?

6.響應(yīng)式的數(shù)據(jù)綁定

這里的響應(yīng)式不是@media 媒體查詢(xún)中的響應(yīng)式布局铛楣,而是指vue.js會(huì)自動(dòng)對(duì)頁(yè)面中某些數(shù)據(jù)的變化做出響應(yīng)。至于是如何響應(yīng)的岸浑,大家可以先把下面這段代碼隨便粘貼到一個(gè)擴(kuò)展名為html的文件然后用瀏覽器打開(kāi)矢洲,隨便在文本框里面輸入一些文字读虏,觀察一下頁(yè)面變化盖桥。

7.組件化開(kāi)發(fā)

還記得在傳統(tǒng)前端開(kāi)發(fā)的時(shí)候揩徊,我們都是每個(gè)人做一個(gè)頁(yè)面,然后最后套入各種后端模版引擎齿税,比如說(shuō)PHP的Smarty或者Java的JSP等等偎窘。

但是現(xiàn)在我們做單頁(yè)應(yīng)用陌知,頁(yè)面交互和結(jié)構(gòu)十分復(fù)雜仆葡,一個(gè)頁(yè)面上就有許許多多的模塊需要編寫(xiě)把篓,而且往往一個(gè)模塊的代碼量和工作量就非常龐大腰涧,如果還按照原先的方法來(lái)開(kāi)發(fā)疗锐,那么會(huì)累死人滑臊。而且遇到以后的產(chǎn)品需求變更雇卷,修改起來(lái)也非常麻煩关划,生怕動(dòng)了其中一個(gè)div之后,其他div跟著雪崩翘瓮,整個(gè)頁(yè)面全部亂套贮折,或者由于JavaScript的事件冒泡機(jī)制,導(dǎo)致修改一些內(nèi)層的DOM事件處理函數(shù)之后春畔,出現(xiàn)各種莫名其妙的詭異BUG脱货。

在面向?qū)ο缶幊讨校覀兛梢允褂妹嫦驅(qū)ο蟮乃枷雽⒏鞣N模塊打包成類(lèi)或者把一個(gè)大的業(yè)務(wù)模塊拆分成更多更小的幾個(gè)類(lèi)律姨。在面向過(guò)程編程中,我們也可以把一些大功能拆分成許多函數(shù)择份,然后分配給不同的人來(lái)開(kāi)發(fā)扣孟。

在前端應(yīng)用,我們是否也可以像編程一樣把模塊封裝呢荣赶?這就引入了組件化開(kāi)發(fā)的思想凤价。

Vue.js通過(guò)組件鸽斟,把一個(gè)單頁(yè)應(yīng)用中的各種模塊拆分到一個(gè)一個(gè)單獨(dú)的組件(component)中,我們只要先在父級(jí)應(yīng)用中寫(xiě)好各種組件標(biāo)簽(占坑)利诺,并且在組件標(biāo)簽中寫(xiě)好要傳入組件的參數(shù)(就像給函數(shù)傳入?yún)?shù)一樣富蓄,這個(gè)參數(shù)叫做組件的屬性),然后再分別寫(xiě)好各種組件的實(shí)現(xiàn)(填坑)慢逾,然后整個(gè)應(yīng)用就算做完了立倍。

8.Virtual DOM

現(xiàn)在的網(wǎng)速越來(lái)越快了,很多人家里都是幾十甚至上百M(fèi)的光纖侣滩,手機(jī)也是4G起步了口注,按道理一個(gè)網(wǎng)頁(yè)才幾百K,而且瀏覽器本身還會(huì)緩存很多資源文件君珠,那么幾十M的光纖為什么打開(kāi)一個(gè)之前已經(jīng)打開(kāi)過(guò)寝志,已經(jīng)有緩存的頁(yè)面還是感覺(jué)很慢呢?這就是因?yàn)闉g覽器本身處理DOM也是有性能瓶頸的策添,尤其是在傳統(tǒng)開(kāi)發(fā)中材部,用JQuery或者原生的JavaScript DOM操作函數(shù)對(duì)DOM進(jìn)行頻繁操作的時(shí)候,瀏覽器要不停的渲染新的DOM樹(shù)舰攒,導(dǎo)致頁(yè)面看起來(lái)非嘲芨唬卡頓悔醋。

而Virtual DOM則是虛擬DOM的英文摩窃,簡(jiǎn)單來(lái)說(shuō),他就是一種可以預(yù)先通過(guò)JavaScript進(jìn)行各種計(jì)算芬骄,把最終的DOM操作計(jì)算出來(lái)并優(yōu)化猾愿,由于這個(gè)DOM操作屬于預(yù)處理操作,并沒(méi)有真實(shí)的操作DOM账阻,所以叫做虛擬DOM蒂秘。最后在計(jì)算完畢才真正將DOM操作提交,將DOM操作變化反映到DOM樹(shù)上淘太。

對(duì)于vue.js的Virtual DOM姻僧,目前業(yè)界有著褒貶不一的評(píng)價(jià)。有人認(rèn)為Vue.js作為一個(gè)輕量級(jí)框架蒲牧,引入Virtual DOM會(huì)加大Vue.js本身的代碼尺寸撇贺,也會(huì)消耗更多CPU(手機(jī)上會(huì)更耗電)(注意:消耗更多的CPU并不意味著會(huì)更卡,因?yàn)镴avaScript計(jì)算是后臺(tái)計(jì)算冰抢,他的計(jì)算量還不至于讓DOM操作變得卡頓)松嘶,并且在操作單個(gè)DOM元素的時(shí)候,反而多了一道計(jì)算工序挎扰,會(huì)更慢翠订。但也有人認(rèn)為基本上會(huì)用Vue.js開(kāi)發(fā)的都是頁(yè)面中內(nèi)容很多的元素巢音,肯定操作的DOM量級(jí)普遍較大,平均一下還是比較劃算的尽超。

9.我到底該怎么用Vue.js做單頁(yè)應(yīng)用開(kāi)發(fā)官撼?

說(shuō)了這么多,我還是不知道怎么用它做出一個(gè)像知乎那樣的頁(yè)面啊似谁,到底怎么學(xué)它呢歧寺?

前面我們看了一個(gè)響應(yīng)式的數(shù)據(jù)綁定案例,那只是一個(gè)DEMO棘脐,而且也看不出有什么實(shí)際意義斜筐,離真正的單頁(yè)應(yīng)用程序還差得遠(yuǎn),到底怎么用它開(kāi)發(fā)真實(shí)的項(xiàng)目呢蛀缝?

我的建議是顷链,先把介紹 - vue.js官方文檔的基礎(chǔ)部分硬著頭皮看一遍。除了組件這個(gè)小節(jié)涉及到了很多晦澀難懂的名詞以外屈梁,前面幾章完全就是把Vue.js當(dāng)作一個(gè)模版引擎來(lái)用嗤练。

然后開(kāi)始學(xué)習(xí)ECMAScript6,Webpack在讶,NPM以及Vue-Cli的基本用法煞抬,最好對(duì)Node.js也要有所了解。

最后組件部分先大致看一遍构哺,了解組件里面都有哪些概念之后革答,開(kāi)始看網(wǎng)上各種實(shí)戰(zhàn)視頻以及文章還有別人開(kāi)源的源代碼。

10.在前面你提到過(guò)好幾次ECMAScript曙强,這是啥残拐?

ECMAScript聽(tīng)名字好像和JavaScript很像,難不成他們有什么千絲萬(wàn)縷的聯(lián)系碟嘴?

沒(méi)錯(cuò)你猜對(duì)了溪食,他們之間還真有著很深的聯(lián)系。

引用阮一峰老師的話:(ECMAScript 6入門(mén))

要講清楚這個(gè)問(wèn)題娜扇,需要回顧歷史错沃。1996年11月,JavaScript 的創(chuàng)造者 Netscape 公司雀瓢,決定將 JavaScript 提交給國(guó)際標(biāo)準(zhǔn)化組織ECMA枢析,希望這種語(yǔ)言能夠成為國(guó)際標(biāo)準(zhǔn)。次年致燥,ECMA 發(fā)布262號(hào)標(biāo)準(zhǔn)文件(ECMA-262)的第一版登疗,規(guī)定了瀏覽器腳本語(yǔ)言的標(biāo)準(zhǔn),并將這種語(yǔ)言稱(chēng)為 ECMAScript,這個(gè)版本就是1.0版辐益。

該標(biāo)準(zhǔn)從一開(kāi)始就是針對(duì) JavaScript 語(yǔ)言制定的断傲,但是之所以不叫 JavaScript,有兩個(gè)原因智政。一是商標(biāo)认罩,Java 是 Sun 公司的商標(biāo),根據(jù)授權(quán)協(xié)議续捂,只有 Netscape 公司可以合法地使用 JavaScript 這個(gè)名字垦垂,且 JavaScript 本身也已經(jīng)被 Netscape 公司注冊(cè)為商標(biāo)。二是想體現(xiàn)這門(mén)語(yǔ)言的制定者是 ECMA牙瓢,不是 Netscape劫拗,這樣有利于保證這門(mén)語(yǔ)言的開(kāi)放性和中立性。

因此矾克,ECMAScript 和 JavaScript 的關(guān)系是页慷,前者是后者的規(guī)格,后者是前者的一種實(shí)現(xiàn)(另外的 ECMAScript 方言還有 Jscript 和 ActionScript)胁附。日常場(chǎng)合酒繁,這兩個(gè)詞是可以互換的。

而ECMAScript6就是新一代的JavaScript語(yǔ)言控妻。

這里也強(qiáng)烈推薦大家學(xué)習(xí)ECMAScript6的時(shí)候參考這本書(shū)ECMAScript 6入門(mén)

11.我在學(xué)習(xí)Vue.js的時(shí)候老是聽(tīng)到Webpack州袒,這是啥?

Webpack是一個(gè)前端打包和構(gòu)建工具弓候。如果你之前一直是手寫(xiě)HTML郎哭,CSS,JavaScript弓叛,并且通過(guò)link標(biāo)簽將CSS引入你的HTML文件彰居,以及通過(guò)Script標(biāo)簽的src屬性引入外部的JS腳本诚纸,那么你肯定會(huì)對(duì)這個(gè)工具感到陌生撰筷。不要緊,我們先來(lái)了解一下為什么要用Webpack畦徘,然后帶著原因去學(xué)習(xí)就好了毕籽。

12.為什么要用Webpack

前面說(shuō)了,做一個(gè)單頁(yè)應(yīng)用程序本身就相當(dāng)復(fù)雜井辆,而且在做的時(shí)候肯定會(huì)使用到很多素材和別的第三方庫(kù)关筒,我們?cè)撊绾稳ス芾磉@些東西呢?

還有前面講到了Webpack是一個(gè)前端打包工具杯缺,前端代碼為什么要打包呢蒸播?因?yàn)閱雾?yè)應(yīng)用程序中用到很多素材,如果每一個(gè)素材都通過(guò)在HTML中以src屬性或者link來(lái)引入,那么請(qǐng)求一個(gè)頁(yè)面的時(shí)候袍榆,可能瀏覽器就要發(fā)起十多次請(qǐng)求胀屿,往往請(qǐng)求的這些資源都是一些腳本代碼或者很小的圖片,這些資源本身才幾k包雀,下載連1秒都不需要宿崭,但是由于HTTP是應(yīng)用層協(xié)議,它的下層是TCP這個(gè)運(yùn)輸層協(xié)議才写,TCP的握手和揮手過(guò)程消耗的時(shí)間可能比下載資源本身還要長(zhǎng)葡兑,所以需要把這些小文件全部打包成一個(gè)文件,這樣只要一次TCP握手和揮手的過(guò)程赞草,就把多個(gè)資源給下載下來(lái)了讹堤,并且多個(gè)資源由于都是共享一個(gè)HTTP請(qǐng)求,所以head等部分也是共享的厨疙,相當(dāng)于形成了規(guī)模效應(yīng)蜕劝,讓網(wǎng)頁(yè)展現(xiàn)更快,用戶體驗(yàn)更好轰异。

前面說(shuō)到Webpack還有構(gòu)建的功能岖沛,這就不得不提到了ECMAScript6這個(gè)新版本的JavaScript,但是現(xiàn)在國(guó)內(nèi)外還有很多人用著老版本的瀏覽器搭独,這些瀏覽器并不支持ECMAScript6婴削,那么我們的前端項(xiàng)目如何在這種瀏覽器上運(yùn)行呢?這就需要Webpack的Loader自動(dòng)載入一個(gè)轉(zhuǎn)換器來(lái)將我們寫(xiě)的ECMAScript6轉(zhuǎn)換成瀏覽器能支持的老版本JavaScript語(yǔ)言牙肝,這個(gè)轉(zhuǎn)換器的名字叫做babel唉俗,如果你以后聽(tīng)到或者看到了這個(gè)單詞,應(yīng)該要知道它就是一個(gè)ECMAScript6 to 老版本JavaScript的轉(zhuǎn)換器了配椭。這也是Webpack的構(gòu)建功能虫溜。當(dāng)然對(duì)前端有更深入的同學(xué)還會(huì)知道Sass,Less股缸,stylus之類(lèi)的CSS預(yù)處理器衡楞,我們也可以通過(guò)在Loader中編寫(xiě)特定的規(guī)則來(lái)實(shí)現(xiàn)自動(dòng)將這些CSS預(yù)處理語(yǔ)言轉(zhuǎn)換成普通瀏覽器能識(shí)別的CSS代碼。

開(kāi)頭的介紹提到了vue.js可以使用單文件組件開(kāi)發(fā)項(xiàng)目敦姻,其實(shí)也是通過(guò)Webpack將單文件組件中的模版瘾境,樣式以及JS轉(zhuǎn)換到主頁(yè)面中

當(dāng)然Webpack不止這點(diǎn)功能,它還可以通過(guò)安裝各種插件來(lái)擴(kuò)展镰惦,比如說(shuō)熱加載技術(shù)迷守,就是解放鍵盤(pán)的F5鍵。讓我們修改代碼旺入,并且按Ctrl+S保存之后兑凿,瀏覽器頁(yè)面自動(dòng)刷新變化凯力,不需要我們?nèi)ナ謩?dòng)刷新,還有一些插件可以自動(dòng)添加注釋?zhuān)詣?dòng)給CSS代碼加上一些瀏覽器內(nèi)核對(duì)CSS3兼容前綴礼华,就像webkit-xxx之類(lèi)的一樣沮协。

13.NPM和Node.js又是什么?它們是什么關(guān)系卓嫂?

首先講講Node.js慷暂。我們知道通常情況下,JavaScript的運(yùn)行環(huán)境都是瀏覽器晨雳,因此JavaScript的能力也就局限于瀏覽器能賦予它的權(quán)限了行瑞。比如說(shuō)讀寫(xiě)本地系統(tǒng)文件這種操作,一般情況下運(yùn)行在瀏覽器中的JavaScript代碼是沒(méi)有這個(gè)操作權(quán)限的餐禁。如果我們想用JavaScript寫(xiě)出一些能夠運(yùn)行在操作系統(tǒng)上的血久,能夠具有像PHP,JAVA之類(lèi)的編程語(yǔ)言具有的功能的程序該怎么辦呢帮非?Node.js就解決了這個(gè)問(wèn)題氧吐。Node.js是一個(gè)服務(wù)端的JavaScript運(yùn)行環(huán)境,通過(guò)Node.js可以實(shí)現(xiàn)用JavaScript寫(xiě)?yīng)毩⒊绦蚰┛O裎覀冎疤岬降腤ebpack就是Node.js寫(xiě)的筑舅,所以作為一個(gè)前端開(kāi)發(fā),即使你不用Node.js寫(xiě)?yīng)毩⒊绦蛟刹眨驳门湟粋€(gè)Node.js運(yùn)行環(huán)境翠拣,畢竟很多前端工具都是使用它寫(xiě)的。

NPM是一個(gè)node.js的包管理器游盲。我們?cè)趥鹘y(tǒng)開(kāi)發(fā)的時(shí)候误墓,JQuery.js大多都是百度搜索,然后去官網(wǎng)下載益缎,或者直接引入CDN資源谜慌,這種方法太過(guò)于麻煩。如果以后遇到其他的包莺奔,這個(gè)包的代碼本身可能還調(diào)用了其他的包(也稱(chēng)這個(gè)包和其他的那幾個(gè)包存在依賴(lài)關(guān)系)欣范,那么我們要在自己的項(xiàng)目中引入一個(gè)包將變得十分困難。現(xiàn)在我們有了NPM這個(gè)包管理器弊仪,直接可以通過(guò)

npm install xxx包名稱(chēng)

的方式引入它熙卡,比如說(shuō)

npm install vue

就自動(dòng)在當(dāng)前項(xiàng)目文件夾下導(dǎo)入了這個(gè)包,并且npm自動(dòng)下載好了vue這個(gè)包依賴(lài)的其他包励饵。

至于有的人在按照網(wǎng)上的npm教程配置的時(shí)候踩坑了,發(fā)現(xiàn)下載速度很慢或者完全下載不了滑燃,那是因?yàn)槲覈?guó)有著眾所周知的原因役听,網(wǎng)上也有各種解決方法可以解決這個(gè)問(wèn)題,大家多善用搜索引擎。

前面提到了Webpack可以安裝各種插件來(lái)擴(kuò)展功能典予,其實(shí)也是通過(guò)這種方式擴(kuò)展甜滨。

如果你學(xué)過(guò)PHP的話,NPM就和PHP里面的Composer差不多瘤袖。也和CentOS下的yum和Ubuntu下的apt-get差不多衣摩。

14.Vue-CLi又是啥?

它是一個(gè)vue.js的腳手架工具捂敌。說(shuō)白了就是一個(gè)自動(dòng)幫你生成好項(xiàng)目目錄艾扮,配置好Webpack,以及各種依賴(lài)包的工具占婉,它可以通過(guò)

npm install vue-cli -g

的方式安裝泡嘴,后面的-g表示全局安裝的意思,意味著你可以打開(kāi)命令行之后直接通過(guò)vue命令調(diào)用它逆济。

15.我該不該學(xué)Vue.js酌予?

現(xiàn)在Vue.js無(wú)論是發(fā)展勢(shì)頭還是作者支持還是很好的,而且它本身中文資料就比較多奖慌,教程也很多抛虫,現(xiàn)在隨隨便便打開(kāi)幾個(gè)和前端開(kāi)發(fā)有關(guān)的知乎專(zhuān)欄,基本上都能見(jiàn)到相關(guān)文章简僧,社區(qū)也很活躍莱褒。

至于你該不該學(xué),取決于你自己涎劈,如果你當(dāng)前只是做做以?xún)?nèi)容展示為主的項(xiàng)目广凸,或者就是成天用各種CMS建站仿站,并且以后都不打算更換更好的工作蛛枚,那么可以暫時(shí)不用學(xué)谅海。如果你開(kāi)發(fā)的項(xiàng)目交互非常多,而且前后端開(kāi)發(fā)都對(duì)前后端分離有很清楚的認(rèn)識(shí)蹦浦,那么可以大膽的學(xué)習(xí)扭吁,并且在實(shí)際項(xiàng)目中運(yùn)用。

16.Vue.js怎么火起來(lái)的盲镶?

關(guān)于這個(gè)問(wèn)題侥袜,網(wǎng)上說(shuō)法很多,我自己認(rèn)為主要還是前些年大前端變革太快溉贿,而最近一年開(kāi)始Vue.js+Webpack這個(gè)組合開(kāi)始逐漸穩(wěn)定下來(lái)了枫吧,而且已經(jīng)有了很多中文資料。

對(duì)比它的競(jìng)爭(zhēng)對(duì)手AngularJS宇色,新舊版本項(xiàng)目無(wú)法平滑升級(jí)九杂,變革太大讓用戶感覺(jué)不安穩(wěn)颁湖。

而React本身主流推薦用的是JSX,需要額外學(xué)習(xí)一門(mén)語(yǔ)法(什么例隆?學(xué)Vue.js還要學(xué)ECMAScript6甥捺?現(xiàn)在ECMAScript6是趨勢(shì),并不是因?yàn)閂ue.js才要學(xué)的)镀层,并且React本身用的是render寫(xiě)法編寫(xiě)模版代碼镰禾,這讓很多用習(xí)慣了Smarty等后端模版引擎得人來(lái)使用感覺(jué)很不適應(yīng),現(xiàn)在看來(lái)React本身在中國(guó)一些論壇社區(qū)的火爆程度還是沒(méi)有Vue.js高唱逢。

當(dāng)然也并不是說(shuō)除了Vue.js以外其他框架都很差吴侦。像知乎新版也是用React開(kāi)發(fā)的,他還是有各自?xún)?yōu)秀的地方大家可以深入學(xué)習(xí)之后做出自己的判斷惶我。

17.我在很多地方還看到Vuex和Vue-route妈倔,它們又是什么?

Vuex是vue的一個(gè)狀態(tài)管理器绸贡。用于集中管理一個(gè)單頁(yè)應(yīng)用程序中的各種狀態(tài)盯蝴。

Vue-route是vue的一個(gè)前端路由器,這個(gè)路由器不是我們上網(wǎng)用的路由器听怕,而是一個(gè)管理請(qǐng)求入口和頁(yè)面映射關(guān)系的東西捧挺。它可以實(shí)現(xiàn)對(duì)頁(yè)面局部進(jìn)行無(wú)刷新的替換,讓用戶感覺(jué)就像切換到了網(wǎng)頁(yè)一樣尿瞭。

要講清楚這兩個(gè)東西闽烙,又得花費(fèi)大量篇幅,所以這里只是簡(jiǎn)單提一下声搁,先學(xué)好vue.js本身才是最重要的黑竞。

18.我還在一些地方看到過(guò)Vue-resource和Axios,它們又是什么疏旨?

我們?cè)趥鹘y(tǒng)的前后端不分離的開(kāi)發(fā)中很魂,后端直接把數(shù)據(jù)通過(guò)模版引擎拼接進(jìn)了返回的HTML中。而現(xiàn)在做單頁(yè)應(yīng)用程序?qū)儆谇昂蠖朔蛛x開(kāi)發(fā)檐涝,那么這個(gè)單頁(yè)應(yīng)用程序中的數(shù)據(jù)就得通過(guò)ajax的方式獲取遏匆,也要通過(guò)ajax的方式提交到后端。

在傳統(tǒng)開(kāi)發(fā)中我們都是通過(guò)xmlhttprequest手動(dòng)操作谁榜,或者通過(guò)JQuery的ajax方法來(lái)進(jìn)行數(shù)據(jù)提交獲取幅聘。

vue.js本身沒(méi)有封裝ajax操作庫(kù),所以我們要通過(guò)Vue-resource和Axios來(lái)進(jìn)行ajax操作窃植,而因?yàn)榉N種原因帝蒿,現(xiàn)在vue.js2.0已經(jīng)將axios作為官方推薦的ajax庫(kù)了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撕瞧,一起剝皮案震驚了整個(gè)濱河市陵叽,隨后出現(xiàn)的幾起案子狞尔,更是在濱河造成了極大的恐慌丛版,老刑警劉巖巩掺,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異页畦,居然都是意外死亡胖替,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)豫缨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)独令,“玉大人,你說(shuō)我怎么就攤上這事好芭∪技” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵舍败,是天一觀的道長(zhǎng)招狸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)邻薯,這世上最難降的妖魔是什么裙戏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮厕诡,結(jié)果婚禮上累榜,老公的妹妹穿的比我還像新娘。我一直安慰自己灵嫌,他們只是感情好壹罚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著寿羞,像睡著了一般猖凛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稠曼,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天形病,我揣著相機(jī)與錄音,去河邊找鬼霞幅。 笑死漠吻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的司恳。 我是一名探鬼主播途乃,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了撩笆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胰挑,失蹤者是張志新(化名)和其女友劉穎试读,沒(méi)想到半個(gè)月后杠纵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钩骇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年比藻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倘屹。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡银亲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纽匙,到底是詐尸還是另有隱情务蝠,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布烛缔,位于F島的核電站馏段,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏力穗。R本人自食惡果不足惜毅弧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望当窗。 院中可真熱鬧够坐,春花似錦、人聲如沸崖面。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巫员。三九已至庶香,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間简识,已是汗流浹背赶掖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留七扰,地道東北人奢赂。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像颈走,于是被迫代替她去往敵國(guó)和親膳灶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Vue.js新手入門(mén)指南 最近在逛各大網(wǎng)站,論壇轧钓,以及像SegmentFault等編程問(wèn)答社區(qū)序厉,發(fā)現(xiàn)Vue.js異...
    joker731閱讀 862評(píng)論 0 12
  • 轉(zhuǎn)自:https://wx.abbao.cn/a/4953-097a6b683ef44aa5.html 前端討論群...
    秋天的程序員閱讀 1,791評(píng)論 3 45
  • 一:什么是閉包?閉包的用處毕箍? (1)閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)弛房。在本質(zhì)上,閉包就 是將函數(shù)內(nèi)部和函數(shù)外...
    xuguibin閱讀 9,536評(píng)論 1 52
  • 前言 您將在本文當(dāng)中了解到,往網(wǎng)頁(yè)中添加數(shù)據(jù),從傳統(tǒng)的dom操作過(guò)渡到數(shù)據(jù)層操作,實(shí)現(xiàn)同一個(gè)目標(biāo),兩種不同的方式....
    itclanCoder閱讀 25,761評(píng)論 1 12
  • 前端開(kāi)發(fā)面試題 <a name='preface'>前言</a> 只看問(wèn)題點(diǎn)這里 看全部問(wèn)題和答案點(diǎn)這里 本文由我...
    自you是敏感詞閱讀 756評(píng)論 0 3