javascript
《AngularJS深度剖析与最佳实践》一2.2 模块
本節書摘來自華章出版社《AngularJS深度剖析與最佳實踐》一書中的第2章,第2.2節,作者 雪狼 破狼 彭洪偉,更多章節內容可以訪問云棲社區“華章計算機”公眾號查看
2.2 模塊
與其他現代語言不同,當前版本的JavaScript(ECMAScript 5)并沒有內置模塊化語法。但是,隨著程序規模越來越大,模塊化的需求越來越重要,于是出現了require.js等第三方庫,試圖用庫來彌補語言的不足。Angular并不依賴require.js等第三方庫,而是自己實現了模塊化系統,這個系統的核心就是模塊(module)。
我們先來回顧一下“模塊”的概念,然后自然就明白Angular中的module是怎么回事了。
所謂模塊是指把相關的一組編程元素(如類、函數、變量等)組織到同一個發布包中。這些編程元素之間緊密協作,隱藏實現細節,只通過公開的接口與其他模塊合作。
模塊是一個粒度適中的復用單位,也是最常見的復用形式。比如我們常用的第三方庫往往對外公開好幾個類,使用者只要關注其公開接口就可以了,不用了解其實現細節,這種第三方庫就是一個“模塊”。
Angular的module也是如此。Angular中的編程元素包括Service、Directive、Filter、Controller等,它們只有通過模塊進行“導出”才能供別人使用。如:angular.module('com.ngnice.app').service('ui', function() {...});語句的作用是:先取出一個名為com.ngnice.app的模塊,然后把function() {...}作為一個回調函數以ui作為名字注冊進去。這樣,別人就可以隨時通過ui這個名字把它從com.ngnice.app模塊中取出來。
所以,我們可以簡單地把模塊看做一個注冊表(registry),它保存著名字和編程元素的對照表,既可以存入,也可以取出。
一個程序往往不會只含有一個模塊,這些模塊需要互相協作,這就導致了模塊之間具有依賴關系,比如有一個可復用模塊,名叫common,而我們的應用想要使用其中名叫authHandler的service。那么我們就要先聲明這種依賴關系:angular.module('com.ngnice.app', ['common']),這樣,Angular就知道該去common模塊中查找這個名叫authHandler的Service。如果沒有聲明這種依賴關系,那么就算引入了它所在的JavaScript文件,也照樣是無法找到的,這是新手很容易踩坑的地方,請特別注意。同時,Angular還可以自動檢測出循環依賴,以免出現無限遞歸。
注意,我們剛才調用了兩次module函數:angular.module('com.ngnice.app')和angular.module('com.ngnice.app', ['common']),前者可不是后者的簡寫形式,而是具有完全不同的含義:前者的作用是引用一個模塊,也就是說查找一個名叫app的模塊,并返回其引用,如果模塊不存在,則會觸發一個異常[$injector:nomod] Module 'com.ngnice.app' is not available...;而后者的作用是創建一個模塊,并且聲明這個模塊需要依賴一個名為common的模塊,第二個參數是個數組,所以還可以聲明依賴更多個模塊。
模塊依賴關系是一棵樹,這就意味著:凡是依賴了app模塊的更高級模塊,也會自動依賴app所依賴的common等模塊。
總結
以上是生活随笔為你收集整理的《AngularJS深度剖析与最佳实践》一2.2 模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动端H5页面高清多屏适配方案
- 下一篇: 《C++入门经典(第6版)》——1.3