我的前端轉(zhuǎn)行之路2018/08

之后的這八周學(xué)習(xí)就是一段不斷翻車饺蔑、不斷總結(jié)锌介、然后再不斷爬起來的過程。工地的居住環(huán)境十分惡劣,4平米的一個倉庫孔祸,狹小昏暗無窗隆敢,通風(fēng)不暢、白天室內(nèi)溫度足足有42°崔慧,能夠?qū)垢邷氐闹挥幸粋€小風(fēng)扇拂蝎,還時不時停水?dāng)嚯姡詫?dǎo)致工作休息時間也不太穩(wěn)定惶室,白天太熱了就出去上工干活温自,傍晚涼快了就回來寫代碼,有時晚上熱的失眠就爬起來寫通宵皇钞。期間的迷惑悼泌、糾結(jié)與苦楚實在是難以言表。

這期間寫了六個小demo
源文件下載地址:https://github.com/gusuziyi/mall

第一周比較順利夹界,在網(wǎng)易云課堂上看完了bootstrap券躁,然后就找了三個網(wǎng)站開始山寨,中間盡管小有波折掉盅,但在bootstrap官網(wǎng)上基本都找到了解決方案,還順便學(xué)會了怎樣使用阿里的iconfont圖標(biāo)以舒,這是一套字體矢量圖標(biāo)趾痘,在任何設(shè)備上都不會失真,與bootstrap的響應(yīng)式思想十分契合蔓钟;

第二周在淘寶上買了一套vue視頻永票,跟著敲了一遍,一周時間基本入門滥沫,然后結(jié)合bootstrap寫了mall的v1.0版侣集,實現(xiàn)了一個類似于購物車的小頁面,這期間發(fā)現(xiàn)了mockjs兰绣,他可以攔截瀏覽器的ajax請求世分,然后返回隨機(jī)生成的隨機(jī)數(shù),是一款很不錯的測試工具缀辩。代碼方面整體來講并沒遇上過多的障礙臭埋,因為就用一個vue對象,所有函數(shù)和變量在一起臀玄,修復(fù)bug很容易瓢阴。
使用 mockjs 隨機(jī)生成的數(shù)據(jù)
編寫調(diào)用mock函數(shù)
使用mock生成數(shù)據(jù)

使用mock生成數(shù)據(jù),這里我試了很久健无,除數(shù)字外其他數(shù)據(jù)都必須返回函數(shù)調(diào)用荣恐,否則會有無法實現(xiàn)Random方法,另外dataImage方法需要canvas支持,此處不影響叠穆,但在后來寫V3.0版時node服務(wù)器會有報錯

第三周開始學(xué)nodejs少漆,淘寶上買了一套視頻,跟著視頻手?jǐn)]了一套http服務(wù)器和路由器痹束,然后在8888端口上實現(xiàn)了之前那個簡陋的拼圖游戲
用js實現(xiàn)的簡易拼圖游戲
圖一检疫、讓我費解的地方
圖二、讓我費解的地方

但這期間node讓我費解的地方有兩個祷嘶,一個是callback是什么屎媳,如圖一第12行,一個是為何在函數(shù)體內(nèi)的this賦值论巍,圖二第5行烛谊,

在查過大量資料之后,終于理解了callback是處理異步低速函數(shù)的一種機(jī)制嘉汰,由于讀寫硬盤與CPU運行相比極慢丹禀,所以程序運行后丟給readFile一個cb就不管了,什么時候硬盤讀完了用cb把數(shù)據(jù)發(fā)送過來觸發(fā)響應(yīng)函數(shù)就行了鞋怀,而this賦值則是js中的閉包概念双泪,這樣做的好處是能夠避免變量遭到污染,那時我還不知道es6的存在密似,還不知道變量作用域提升焙矛,隨處用的都是var,所以費了好大力氣才理解這個閉包的概念残腌,其中走的彎路一言難盡村斟。

第四周開始學(xué)Mongo數(shù)據(jù)庫,看過兩天文檔之后抛猫,然后在路由里面寫出了增刪改查方法
add方法

第五周開始學(xué)express+ejs框架蟆盹,這個東西我覺得類似于之前用過的cms系統(tǒng),內(nèi)部實現(xiàn)一套邏輯供前臺調(diào)用闺金,只是cms只需要理解怎么套模板就好了逾滥,而express需要理解原理。沒想到這個東西居然也屬于前端范疇败匹,看來這個前端行業(yè)挺不容易的匣距。盡管express都是集成好的東西,比node要簡單一些哎壳,但是由于許多東西沒有積累毅待,也會踩不少坑,像下面這些:
由于當(dāng)時不知道子路由和路由重定向归榕,結(jié)果純手工實現(xiàn)的這些功能

由于當(dāng)時不知道子路由和路由重定向尸红,結(jié)果純手工實現(xiàn)的這些功能

讓人無所適從的bug

對策略集里的通用函數(shù)復(fù)雜度估計不夠,第4行開始只寫了一個data,結(jié)果寫到一大半的時候發(fā)現(xiàn)bug無法解決只能改結(jié)構(gòu)外里,增加data1和data2怎爵,挺無奈的。盅蝗。鳖链。

第六周,因為學(xué)會express墩莫,就開始改版之前mall芙委,升級成V2.0,主要改動有兩個狂秦,一是將mall頁面搭設(shè)到本地express服務(wù)器上灌侣,二是將頁面拆成層層嵌套的vue組件

在express中渲染的mall頁面
在ejs中區(qū)分商店shop、商品item和總價totalsum三個vue組件
組件中的控制代碼

這期間重點關(guān)注了關(guān)于組件間的數(shù)據(jù)通信:父子之間使用props裂问,子父之間使用emit廣播侧啼,兄弟之間使用數(shù)據(jù)總線,更復(fù)雜的數(shù)據(jù)交換還可以使用vuex堪簿。同時痊乾,為了各組件間可以共享數(shù)據(jù)和方法,將根節(jié)點綁定的vm定義為全局原型變量Vue.prototype椭更。經(jīng)過這個練習(xí)哪审,也基本理解了MVC設(shè)計模式。

第七周學(xué)習(xí)了less與es6的基本語法甜孤,然后特郁悶的發(fā)現(xiàn)項目中import和export始終無法正常使用,我一直懷疑是sublime上的babel沒有調(diào)試好畏腕,但是始終查找不出問題缴川,sublime里面的babel插件實在是浩如煙海,查找資料也感覺無從入手描馅,學(xué)習(xí)一度陷入停滯把夸,后來無意中發(fā)現(xiàn)vue-cli,接觸到工程腳手架這個概念铭污,發(fā)現(xiàn)這個工具真是神器恋日,所有的node模塊都可以用npm集成過來,而且babel是默認(rèn)內(nèi)置的嘹狞,組件也全部都是單獨的文件岂膳,加上嚴(yán)格的eslint書寫規(guī)范,非常適合多人合作項目磅网。

所以在第八周使用vue-cli把mall升級成了V3.0谈截,首先介紹下文件夾目錄樹結(jié)構(gòu),設(shè)計的非常有條理性:build是后端服務(wù)器文件;config是服務(wù)器配置簸喂;dist是工程成品文件毙死,使用npm run build 生成,全部兼容es5格式喻鳄;node_modules是依賴包扼倘,由package.json索引,工程文件不必上傳除呵,根目錄下使用npm install能夠自動安裝再菊;src為工作目錄,其中的assets為靜態(tài)資源竿奏,componets為組件集合袄简,router保存路由表,App.vue是app的入口組件泛啸,main.js負(fù)責(zé)綁定App組件绿语、入口文件和路由表;static是內(nèi)置的靜態(tài)路由


文件夾目錄樹結(jié)構(gòu)

第一步我在后端另外搭建了jsonServer服務(wù)器候址,用于返回測試的mock數(shù)據(jù)吕粹,由于vue-cli默認(rèn)占用8080端口,而我將jsonServer設(shè)置于3003端口岗仑,這導(dǎo)致前端的ajax訪問涉及到跨域問題匹耕,我的方法是使用express的cors中間件,把整個3003端口全部設(shè)置成可以跨域訪問荠雕,這就是使用node服務(wù)器的好處稳其,否則在前端我們只有通過構(gòu)造jsonp請求才能解決。


將jsonServer設(shè)置于3003端口
使用expresscors中間件解決跨域問題
jsonServer的一些設(shè)置

jsonServer的一些設(shè)置炸卑,注意第12行既鞠,jsonserver可以將ajax返回數(shù)據(jù)中的對象鍵值解析成express子路由,這樣一份mock就可以支持多個頁面數(shù)據(jù)查詢盖文,非常方便

設(shè)置訪問api接口轉(zhuǎn)發(fā)至 http://localhost:3003/

后來我偶然發(fā)現(xiàn)在config/index.Js中可以直接設(shè)置代理轉(zhuǎn)發(fā)proxyTable嘱蛋,這樣就可以不用設(shè)置cors中間件了

在vue-cli中引入jquery的方法

由于想使用bootstrap,所以查了很久如何在main中引入jquery五续,相關(guān)資料真的寥寥無幾洒敏,直覺告訴我可能思路不對,資料這么少疙驾,證明bootstrap也許并不適合vue凶伙,然后我就查vue該用什么ui框架,結(jié)果主流的有兩個element和iview它碎,要面臨二選一镊靴,其實自學(xué)前端真的好糾結(jié)铣卡,經(jīng)常要糾結(jié)于學(xué)哪個技術(shù),框架要在vue偏竟、angular和react中三選一煮落,預(yù)處理器要在less和sass中二選一,數(shù)據(jù)可視化要在highchart踊谋、echart和d3中三選一蝉仇,UI更是要N選一。最后element和iview糾結(jié)了許久殖蚕,覺得iview更好看一點轿衔,于是就學(xué)了iview。這也是后來遭遇神坑的開端睦疫。

less

然后就是編寫組件害驹,這期間學(xué)會了less,感覺樣式代碼變得很清晰了蛤育,可維護(hù)性大大提升了

但是由于vue還是初學(xué)階段宛官,還是踩到了許多坑,在不斷糾結(jié)瓦糕,不斷試錯底洗,不斷查找資料當(dāng)中,總結(jié)出了以下七條難忘的教訓(xùn):

一咕娄、 data必須定義成函數(shù)亥揖,同時返回對象

二、 computed與methods聯(lián)系不大圣勒,它更像是data费变,一種沒有輸入但必須有輸出的data

三、 想讓props支持駝峰圣贸,必須定義成對象挚歧,例如props:{ isAllCheck:{} , shop:{} },數(shù)組不可以

四、 script中的大寫到了template中會自動轉(zhuǎn)成橫線旁趟,template不支持大寫昼激,例如: ShopList會變成<shop-list>

五庇绽、 Watch中定義方法為 變量名:函數(shù)體,例如: isAllCheck(){ this.isCheck=this.isAllCheck }

六锡搜、可以在created 或mounted中監(jiān)聽廣播,他們不是在創(chuàng)建時監(jiān)聽,而是會一直監(jiān)聽

七瞧掺、可以在枚舉時把:key="index"交給子組件,但子組件中不可調(diào)用index耕餐,會無法識別,正確的做法是子組件發(fā)出廣播事件辟狈,在父組件中監(jiān)聽事件然后使用index

最后的成品V3.0

雖然和之前的V1.0肠缔、V2.0看起來幾乎一樣夏跷,但是后臺發(fā)生了翻天覆地的變化,由于還沒解決node支持canvas的問題明未,無法繪制base64格式的隨機(jī)顏色圖片槽华,v3.0相反還要更丑一點。

就這樣基本完成這個階段的自學(xué)計劃趟妥,走了不少彎路猫态,但同時也學(xué)了不少知識,與七月底的迷茫不同披摄,現(xiàn)在對今后有十分清晰的學(xué)習(xí)目標(biāo)亲雪,就是vue-cli、iview和webpack疚膊,2018年8月,自學(xué)的第十二個月結(jié)束义辕,感覺自己依舊是個戰(zhàn)五渣,希望自己還能堅持的住寓盗,加油

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灌砖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贞让,更是在濱河造成了極大的恐慌周崭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喳张,死亡現(xiàn)場離奇詭異续镇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)销部,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門摸航,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舅桩,你說我怎么就攤上這事酱虎。” “怎么了擂涛?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵读串,是天一觀的道長。 經(jīng)常有香客問我撒妈,道長恢暖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任狰右,我火速辦了婚禮杰捂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棋蚌。我一直安慰自己嫁佳,他們只是感情好挨队,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒿往,像睡著了一般盛垦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓤漏,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天情臭,我揣著相機(jī)與錄音,去河邊找鬼赌蔑。 笑死俯在,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的娃惯。 我是一名探鬼主播跷乐,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趾浅!你這毒婦竟也來了愕提?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤皿哨,失蹤者是張志新(化名)和其女友劉穎浅侨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體证膨,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡如输,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了央勒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片不见。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖崔步,靈堂內(nèi)的尸體忽然破棺而出稳吮,到底是詐尸還是另有隱情,我是刑警寧澤井濒,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布灶似,位于F島的核電站,受9級特大地震影響瑞你,放射性物質(zhì)發(fā)生泄漏酪惭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一捏悬、第九天 我趴在偏房一處隱蔽的房頂上張望撞蚕。 院中可真熱鬧润梯,春花似錦过牙、人聲如沸甥厦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刀疙。三九已至,卻和暖如春扫倡,著一層夾襖步出監(jiān)牢的瞬間谦秧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工撵溃, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留疚鲤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓缘挑,卻偏偏與公主長得像集歇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子语淘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355