AngularJs的源代碼深潛 - 什麼是invokeQueue
和configBlocks
angularjs引導過程中呢?我看他們被傳遞給runInvokeQueue
函數的參數loadModules
。AngularJS invokeQueue和configBlocks
回答
configBlocks
存儲模塊配置期間被實例化的服務的列表:被加載的模塊之後調用方法的列表
angular.module("ng")._configBlocks[0][0]
invokeQueue
存儲:
var foo = angular.module("ng");
foo.constant(alert)
foo._invokeQueue[0]
foo._invokeQueue[0][2][0]
的
module
定義位於AngularJS源代碼的第一行。正如文件所述,每個module
操作的使用壽命可以分爲兩個階段。階段config
階段和run
階段。通過調用angular.module()構造函數公開的對象爲我們提供了這兩種方法。 run方法的功能非常明顯。它只是將config
函數傳遞給run
塊的私有列表。相反,config
方法並不那麼明顯。這裏,什麼config
方法執行:的
invokeLater
私有方法插入的provider
組合及其方法到內部模塊隊列被噴射器實例化期間以後調用。如果不是注射器,模塊將完全無用。CreateInjector
函數是具體實現,它具有私有方法loadModules
。的
loadModules
函數做,除其他外,其被傳遞給它的模塊的開球。它返回所有相互依賴的模塊的所有run
塊的一個數組。噴油器通過其invoke
方法調用它們。最後但並非最不重要的一點,loadModules
函數在遍歷所有相關模塊期間,分別調用其存儲在_invokeQueue
和_configBlock
處的函數。在最後位置調用run
塊。這意味着模塊的所有服務和方法已經公開並準備好使用。相反,config
方法僅適用於模塊公開的提供者。提供者的構造函數存儲在模塊的_invokeQueue
中。兩個噴射器
的第一噴射器,即沒有公開暴露,是提供者的一個噴射器。第二個是實例注入器。實例注入器向提供者緩存詢問所需的構造函數。然後它調用提供程序的適當部分並創建一個實例。在請求提供程序注入器之前,實例注入器在提供程序緩存中搜索。
module.provider
方法暴露了提供者注入器的提供者方法,仔細觀察後提供了很多關於服務生命週期的信息。即使角度結構的其他部分(如指令和控制器)在提供程序的緩存中註冊爲提供程序。然後通過
$provide.provider
方法將$ compileProvider本身註冊爲任何其他提供者。事實上,作爲第一步,module.factory
,module.service
和module.provider
將實例存儲在提供者緩存中。但它是我們掌握的實例注入器。實例注入器要求提供者緩存作爲第一步,然後調用invoke方法,該方法負責處理依賴關係。
參考
- 1. AngularJs組件和angularjs-dropdown-multiselect
- 2. TimelineJS和AngularJS
- 3. Polymaps和Angularjs
- 4. AngularJs和jQueryUi
- 5. ReST和AngularJS
- 6. AngularJS和google-maps
- 7. AngularJS和乾結
- 8. angularjs和bootstrap javascript
- 9. AngularJs和SocketIo
- 10. AngularJS和模型
- 11. Spring MVC和Angularjs
- 12. Spring Boot和AngularJS
- 13. Angularjs和jQuery $ .noConflict()
- 14. AngularJS和Laravel - CORS
- 15. Angularjs和jQuery html5Loader
- 16. Multer和AngularJS
- 17. AngularJs和itunes
- 18. AngularJS和Twitter Bootstrap
- 19. AngularJS和ColdFusion CFC
- 20. AngularJS和$ HTTP
- 21. AngularJs和圖表
- 22. $範圍和Angularjs
- 23. Web Api和Angularjs
- 24. AngularJS和Q.fcall
- 25. Angularjs和routeParams
- 26. Footable3和angularjs
- 27. AngularJS和jQuery
- 28. 與AngularJS和CSS
- 29. Angularjs(phonegap)和socket.io
- 30. AngularJS和Asp.net mvc5