AngularJS模塊化編程最佳實(shí)踐(Modular Programming Best Practices)

這篇文章我是在《angularjs新手到忍者》(《AngularJS_ Novice to Ninja》)這本書看到的蔫浆,是講angularjs如何模塊化的窟蓝,講的很不錯(cuò)挠阁,但是翻譯水平有限乱灵,望大家批評(píng)指正踢故。同時(shí)我也把這篇文章放進(jìn)了github文黎,下面是連接惹苗。

https://github.com/vista5004/angular-course/blob/master/%E6%A8%A1%E5%9D%97%E5%8C%96%E7%BC%96%E7%A8%8B%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5Modular%20Programming%20Best%20Practices.md

當(dāng)你把你的項(xiàng)目源碼分為不同的模塊的時(shí)候,一般由兩個(gè)選擇:

(1)通過(guò)層來(lái)實(shí)現(xiàn)模塊化(2)通過(guò)特征來(lái)實(shí)現(xiàn)模塊化

首先我們進(jìn)入angular seed項(xiàng)目耸峭,下面是這個(gè)項(xiàng)目在github上的地址桩蓉,這是一個(gè)不錯(cuò)的angular項(xiàng)目,大家可以學(xué)習(xí)一下劳闹。

https://github.com/angular/angularseed/tree/69c9416c8407fd5806aab3c63916dfcf0522ecbc

文件的app/js文件中院究,看看采用的哪種模式,當(dāng)你打開文件夾本涕,你會(huì)看到如下幾個(gè)文件:

1业汰、app.js 
2、controller.js
3偏友、directive.js
4蔬胯、filter.js
5对供、server.js

這就是通過(guò)層的概念來(lái)實(shí)現(xiàn)的模塊化位他,每一種組件的類型,被裝進(jìn)了一種特殊的模塊产场。最終這個(gè)主要的依賴于其他四個(gè)模塊的入口app模塊在app.js模塊中定義鹅髓。這是通過(guò)angular.module()的第二個(gè)參數(shù)來(lái)指定的。你只需要參考在html中ng-app指令京景。這種類型模塊化在很多場(chǎng)景都很有用窿冯。例如當(dāng)你遇到一個(gè)特殊類型的bug,找到服務(wù)确徙,你就指定在哪里發(fā)現(xiàn)醒串。但是當(dāng)你的app應(yīng)用規(guī)模和復(fù)雜性增長(zhǎng)到一定程度,或許就適用于通過(guò)層來(lái)劃分模塊的方式鄙皇∥叨模可以通過(guò)特征的方式來(lái)實(shí)現(xiàn)。例如你的站點(diǎn)需要一個(gè)登陸模塊伴逸。所有這些模塊都獨(dú)立存在缠沈,并且緊密的耦合在一起。通常你為每個(gè)模塊創(chuàng)建一個(gè)獨(dú)立的文件用來(lái)放置相關(guān)的JavaScript文件在每個(gè)相關(guān)的文件夾中错蝴。這些文件夾中的代碼是可重用的洲愤,因?yàn)槟隳馨涯骋粋€(gè)模塊的一整個(gè)文件夾放入另外一個(gè)不同的項(xiàng)目中。并且不同的團(tuán)隊(duì)之間可以同時(shí)開發(fā)不同的模塊顷锰,這些模塊并沒(méi)有緊密的耦合在一起柬赐。此外,單元測(cè)試也就變得小菜一碟了官紫,只要你加載需要的模塊躺率,并且分開測(cè)試也變得容易玛界。我們調(diào)整一下Angular Seed Project來(lái)使用這種方式,例如博客系統(tǒng)悼吱,可以使用這種模式:
結(jié)構(gòu)如下:

/app
/img -- application level images
/css -- application level css
/js
    app.js -- the main app module
/modules
/login
/js
    controllers.js --controllers for login module
    directives.js --directives for login module
/views -- views for login module
/css
/img
    loginModule.js -- Main login module definition
/comment
/js
    controllers.js --controllers for login module
    directives.js --directives for login module
/views -- views for comment module
/css
/img
    commentModule.js -- Main comment module definition
    ...
    ...
index.html

在這些的文件中我們定義自己的模塊慎框。比如登陸模塊,如下

app/modules/login/js/controller
angular.module('mainApp.login.controller',[]);

app/modules/login/js/directive.js
angular.module('mainApp.login.directives',[])

app/modules/login/loginModule.js
angular.module('loginModule',['mainApp.login.controller','mainApp.login.directives'])

對(duì)于評(píng)論模塊后添,定義如下

/app/modules/comment/js/controllers.js
angular.module('mainApp.comment.controllers',[]);

/app/modules/comment/js/directives.js
angular.module('mainApp.comment.directives',[]);

/app/modules/comment/loginModule.js
angular.module('commentModule',['mainApp.comment.controllers',mainApp.comment.directives']);

在主要的模塊中定義/app/app.js如下

angular.module('mainApp',['loginModule','commentModule'])

最終在index.html我們啟動(dòng)文件通過(guò)寫入

ng-app='mainApp'

正如你看到的笨枯,這個(gè)登陸模塊loginModule和評(píng)論模塊commentModule互相是不通信的。但是通過(guò)mainApp模塊組合在一起遇西。在HTML文件中馅精,當(dāng)angular遇到ng-app,它就通過(guò)加載指定的模塊啟動(dòng)粱檀。在這種情況下洲敢,angular啟動(dòng)app程序通過(guò)加載mainApp模塊。但是angular發(fā)現(xiàn)這個(gè)mainApp模塊依賴于另外兩個(gè)模塊loginModule和commentModule茄蚯。但是這兩個(gè)模塊本身也依賴于其他兩個(gè)模塊(控制器模塊和指令模塊)压彭,也需要angular來(lái)加載。這樣angular啟動(dòng)程序通過(guò)加載需要的模塊渗常。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壮不,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子皱碘,更是在濱河造成了極大的恐慌询一,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件癌椿,死亡現(xiàn)場(chǎng)離奇詭異健蕊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)踢俄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門缩功,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人褪贵,你說(shuō)我怎么就攤上這事掂之。” “怎么了脆丁?”我有些...
    開封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵世舰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我槽卫,道長(zhǎng)跟压,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任歼培,我火速辦了婚禮震蒋,結(jié)果婚禮上茸塞,老公的妹妹穿的比我還像新娘。我一直安慰自己查剖,他們只是感情好钾虐,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笋庄,像睡著了一般效扫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上直砂,一...
    開封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天菌仁,我揣著相機(jī)與錄音,去河邊找鬼静暂。 笑死济丘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洽蛀。 我是一名探鬼主播摹迷,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辱士!你這毒婦竟也來(lái)了泪掀?” 一聲冷哼從身側(cè)響起听绳,我...
    開封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颂碘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后椅挣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體头岔,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年鼠证,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峡竣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡量九,死狀恐怖适掰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荠列,我是刑警寧澤类浪,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站肌似,受9級(jí)特大地震影響费就,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜川队,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一力细、第九天 我趴在偏房一處隱蔽的房頂上張望睬澡。 院中可真熱鬧,春花似錦眠蚂、人聲如沸煞聪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)米绕。三九已至,卻和暖如春馋艺,著一層夾襖步出監(jiān)牢的瞬間栅干,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工捐祠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碱鳞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓踱蛀,卻偏偏與公主長(zhǎng)得像窿给,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子率拒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,348評(píng)論 25 707
  • 寫在前面的話: 從家人眼中的乖孩子猬膨,到現(xiàn)在充滿自主想法的我角撞,我相信這不是一個(gè)人生的逆向成長(zhǎng)。 從一直安于技術(shù)且自認(rèn)...
    婚戀新觀閱讀 2,412評(píng)論 0 0
  • 2017年10月6號(hào) 星期五 哈爾濱 多云轉(zhuǎn)晴7°-21° 今天早上五點(diǎn)多起來(lái)就忙忙活活的打電話給姑娘找拼車勃痴。車隊(duì)...
    c0deb784fc0b閱讀 268評(píng)論 0 1
  • 想去山上看日出谒所, 想去沙灘堆城堡, 想去海洋館看水母沛申, 想去游樂(lè)園坐過(guò)山車劣领, 我還想去好多地方, 去做美麗的事铁材, ...
    y海閱讀 321評(píng)論 2 4
  • 因?yàn)镃語(yǔ)言是一個(gè)比較底層的語(yǔ)言著觉,庫(kù)內(nèi)沒(méi)有實(shí)現(xiàn)鏈表村生,于是Redis自己實(shí)現(xiàn)了鏈表。Redis的鏈表是一個(gè)雙向鏈表固惯。 ...
    namelessEcho閱讀 226評(píng)論 0 0